欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

汇编计组

程序员文章站 2022-07-05 22:39:34
...

计组

CPU与内存的连接

汇编计组
汇编计组
2.
汇编计组
汇编计组

微操作

汇编计组

定点乘除

乘法

汇编计组

除法

汇编计组

浮点加减

汇编计组

汇编

实验一 上机操作和DEBUG练习

将存放在数据段中的变量VAR1中的三个数,传送到该段中的变量VAR2中。
DATA SEGMENT
VAR1 DW 35,24,0451H ;定义源操作数
VAR2 DW 3 DUP(?) ;定义目的操作数
DATA ENDS
CODE SEGMENT
ASSUME DS:DATA,CS:CODE
START:MOV AX, DATA ;数据段初始化
MOV DS, AX
LEA SI, VAR1
LEA DI, VAR2
MOV AX, [SI] ;传送第一个数
MOV [DI],AX
ADD SI, 2 ;修改SI,DI数值
ADD DI, 2
MOV AX, [SI] ;传送第二个数
MOV [DI], AX
ADD SI, 2
ADD DI, 2
MOV AX, [SI] ;传送第三个数
MOV [DI], AX
MOV AH, 4CH ;程序返回
INT 21H
CODE ENDS
END START

实验二 顺序程序设计

1,计算(X+(Y*Z-100))/W
其中X,Y,Z,W均为十六位有符号数,其存储形式如下,
X DW -13
Y DW 30
Z DW 24
W DW 50
2,设X,Y,Z均为双精度数,他们分别存在X,X+2,Y,Y+2,Z,Z+2存储单元中,存放时高位字存放在高地址,低位字存放在低地址,编写程序实现下面表达式的计算:X+(Y-Z)=W
DATE SEGMENT
X DW -13
Y DW 30
Z DW 24
W DW 50
DATE ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATE
START:MOV AX,DATE
MOV DS,AX
MOV AX,Y
IMUL Z
MOV CX,DX
MOV BX,AX
SUB BX,100
SBB CX,0
MOV AX,X
CWD
ADD AX,BX
ADC DX,CX
IDIV W
MOV AH,4CH
INT 21H
CODE ENDS
END START

DATE SEGMENT
X DW 1,1
Y DW 4,4,
Z DW 3,3
W DW 2 DUP(?)
DATE ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATE
MOV AX,DATE
MOV DS,AX
MOV AX,Y
SUB AX,Z
MOV DX,Y+2
SBB DX,Z+2
ADD AX,X
ADC DX,X+2
MOV W,AX
MOV W+2,DX
MOV AH,4CH
INT 21H
CODE ENDS
END

实验三 串操作程序设计

1,编写完整程序,从键盘输入一个字符串STRING,同时,把字符串STRING中的&字符用空格替代。并显示出替代后字符串及被替代字符的位置。
2,编写完整程序,从键盘输入两串字符OLD和NEW,如果两个字符串相同,显示“YES”,若不同显示“NO”。
DATE SEGMENT
STRING DB 7 DUP(?)

DATE ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATE,ES:DATE
START:MOV AX,DATE
MOV DS,AX
MOV ES,AX
LEA SI,STRING
MOV CX,7
INPSTR:MOV AH,01H
INT 21H
MOV [SI],AL
INC SI
JZ ENDINP
LOOP INPSTR
ENDINP:LEA DI,STRING
MOV AL,’&’
MOV CX,7
CLD
REPNE SCASB
MOV BYTE PTR[DI-1],’ ’
LEA SI,STRING
MOV CX,7
b: MOV AH,02H
MOV DL,[SI]
INT 21H
INC SI
LOOP b
MOV AH,4CH
INT 21H
CODE ENDS
END START

DATE SEGMENT
MESS1 DB 4 DUP(?)
MESS2 DB 4 DUP(?)
MESS3 DB ‘NO’
MESS4 DB ‘YES’
DATE ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATE,ES:DATE
START:MOV AX,DATE
MOV DS,AX
MOV ES,AX
LEA SI,MESS1
MOV CX,4
INPSTR:MOV AH,01H
INT 21H
MOV [SI],AL
INC SI
JZ ENDINP
LOOP INPSTR
ENDINP:LEA SI,MESS2
MOV CX,4
ENDINP1: MOV AH,01H
INT 21H
MOV [SI],AL
INC SI
JZ ZZ
LOOP ENDINP1
ZZ: LEA SI,MESS1
LEA DI,MESS2
MOV CX,4
CLD
REPE CMPSB
JZ Y
LEA SI,MESS3
MOV CX,2
A: MOV AH,02H
MOV DL,[SI]
INT 21H
INC SI
LOOP A
MOV AH,4CH
INT 21H
Y: LEA SI,MESS4
MOV CX,3
B: MOV AH,02H
MOV DL,[SI]
INT 21H
INC SI
LOOP B
MOV AH,4CH
INT 21H
CODE ENDS
END START

实验四 分支程序设计

1、数组ARRAY存放10个字数据,求数组的最大值和最小值,并分别存放在变量MAX和MIN中。

date segment
array dw 1,2,3,4,5,6,7,8,9,0
max dw 1 dup(?)
min dw 1 dup(?)
date ends
code segment
assume cs:code,ds:date
start:mov ax,date
mov ds,ax
mov cx,9
mov bx,0
mov ax,array[bx]
loop1:sub cx,1
cmp ax,array[bx+2]
jg continue1
mov ax,array[bx+2]
continue1:add bx,2
cmp cx,0
jnz loop1
mov max,ax
lea si,max
mov ah,02h
mov dl,[si]
add dl,30h
int 21h
mov cx,9
mov bx,0
mov ax,array[bx]
loop2:sub cx,1
cmp ax,array[bx+2]
jl continue3
mov ax,array[bx+2]
continue3:add bx,2
cmp cx,0
jnz loop2
mov min,ax
lea si,min
mov ah,02h
mov dl,[si]
add dl,30h
int 21h
mov ah,4ch
int 21h
code ends
end start

实验五 循环程序设计

1、数组ARRAY有10个带符号数,数的类型是字,编写程序,将数组按升序进行排列,并显示排序后结果
date segment
array dw 9,7,6,8,5,4,2,3,0,1
date ends
code segment
assume cs:code,ds:date
start:mov ax,date
mov ds,ax

  mov dx,9

loop1: mov bx,0
mov cx,dx
loop2:mov ax,array[bx]
cmp ax,array[bx+2]
jle continue
xchg ax,array[bx+2]
mov array[bx],ax
continue:add bx,2
loop loop2
dec dx
jnz loop1
mov cx,10

lea si,array
loop3:mov ah,02h
mov dl,[si]
add dl,30h
int 21h
add si,2
loop loop3
mov ah,4ch
int 21h
code ends
end start

实验六 子程序设计

1、从键盘输入10个十进制数,存入BUFFER缓冲区,计算10个数的和,并用十进制显示和。请用下面两种方法完成程序设计:
方法1:使用段内调用命令,调用十化二子程序和二化十子程序
方法2:使用段间调用命令,调用十化二子程序和二化十子程序
一、 实验代码
data segment
buffer dw 20 dup(?)
flag dw ?
data ends

code segment
main proc far
assume ds:data,cs:code
mov ax,data
mov ds,ax
mov si,buffer
mov cx,10
lop1:
mov flag,‘0’

refuhao:
mov ah,1
int 21h
cmp al,’-’
jz fuhao
call cin
add si,2
loop lop1
mov cx,10
lea si,buffer
xor bx,bx
lop2:
add bx,[si]
add si,2
loop lop2
call cout
jmp exit

fuhao:
mov flag,‘1’
jmp refuhao

exit:
mov ah,4ch
int 21h

main endp

cin proc near
push cx
push ax
push bx
push dx
xor bx,bx

  loopcin:
     xor ah,ah
     sub al,30h
     cbw
     push ax
     mov ax,bx
     xor dx,dx
     cwd
     mov bx,10
     imul bx
     mov bx,ax
     pop ax
     add bx,ax  
     mov ah,1
     int 21h
     cmp al,' '
     jz exitloopcin
     jmp loopcin

  bianfu:
      neg bx
      mov [si],bx
      jmp exitcin
  exitloopcin:

     cmp flag,'1'
     jz bianfu
     mov [si],bx

  exitcin:
     pop dx
     pop bx
     pop ax
     pop cx
     ret

cin endp

cout proc near
push bx
push ax
push dx
push cx
mov dl,0dh
mov ah,2
int 21h
mov dl,0ah
mov ah,2
int 21h
cmp bx,0
jl fushu
refushu:
mov dx,’#’
push dx

loopcout:
mov ax,bx
xor dx,dx
cwd
mov bx,10
idiv bx
mov bx,ax
add dx,30h
push dx
cmp bx,0
jz exitloopcout
jmp loopcout

exitloopcout:
pop dx
cmp dx,’#’
jz exitcout
mov ah,2
int 21h
jmp exitloopcout

exitcout:
pop cx
pop dx
pop ax
pop bx
ret

fushu:
mov dl,’-’
mov ah,2
int 21h
neg bx
jmp refushu

cout endp

code ends
end main

相关标签: 计组汇编