第二部分 汇编语言编程实验
实验一
对两个8字节无符号数求和,这两个数分别用变量DATA1及DATA2表示。将两数之和的最高进位放在AL中,两数之和的其他位按从高到低顺序依次放在SI,BX,CX,DX中。
解:程序如下:
DATA SEGMENT
DATA1 DB 0CDH,0BCH,0ABH,9AH,78H,56H,34H,12H
DATA2 DB 12H,34H,56H,78H,9AH,0ABH,0BCH,0CDH
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE, DS:DATA
BG: MOV AX, DATA
MOV DS, AX
LEA DI, DATA1
MOV DX, [DI]
MOV CX, [DI+2]
MOV BX, [DI+4]
MOV SI, [DI+6]
LEA DI, DATA2
ADD DX, [DI]
ADC CX, [DI+2]
ADC BX, [DI+4]
ADC SI, [DI+6]
MOV AL, 0
ADC AL, 0
MOV AH, 4CH
INT 21H
CODE ENDS
END BG
实验二
比较以存储变量DATA1和DATA2表示的两个有符号数据的大小,将其中较大数据放在BX寄存器中。
解:程序如下:
DATA SEGMENT
DATA1 DW -113
DATA2 DW -110
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE, DS:DATA
BEGIN: MOV AX, DATA
MOV DS, AX
MOV BX, DATA1
CMP BX, DATA2
JGE NEXT
MOV BX, DATA2
NEXT: MOV AH, 4CH
INT 21H
CODE ENDS
END BEGIN
实验三
从AA单元开始的20个连续单元中存放有20个无符号数,从中出最大数送入BB单元中,试编程。
答: 先把第一个数送入AL寄存器,将AL中的数与后面的19个数逐个比较,若AL中的数小于相比较的数,将两两交换位置,否则两数不交换位置。在比较过程中,AL中始终保持较大的数,比较19次,则AL中必为最大数,然后将其送入BB单元中。
DATA SEGMENT
AA DB 36,58,16,46,71,118,73,52,41,62
DB 2,18,8,24,56,79,113,87,104,75
BB DB ?
DATA ENDS
CODE SEGMENT
ASSUME DS:DATA, CS:CODE
MAIN PROC FAR
START: PUSH DS
MOV AX, 0
PUSH AX
MOV AX, DATA
MOV DS, AX
MOV AL, AA
MOV BX, OFFSET AA
MOV CX, 29
LOOP1: INC BX
CMP AL, [BX]
JAE LOOP2
XCHG AL, [BX]
LOOP2: DEC CX
JNZ LOOP1
MOV BB, AL
RET
MAIN ENDP
CODE ENDS
END START
实验四
试编写一汇编源程序:出从无符号字节数据存储变量VAR开始存放的N个数中的最大数放在BH中。
解:程序如下:
DSEG SEGMENT
VAR DB 3,56H, 6, 19H, 23H, 0A5H
N EQU $-VAR
DSEG ENDS
CSEG SEGMENT
ASSUME CS: CSEG, DS: DSEG
BG: MOV AX, DSEG
MOV DS, AX
MOV CX, N-1
MOV SI, 0
MOV BH, VAR[SI]
JCXZ LAST
AGIN: INC SI
CMP BH, VAR[SI]
JAE NEXT
MOV BH, VAR[SI]
NEXT: LOOP AGIN
LAST: MOV AH, 4CH
INT 21H
CSEG ENDS
END BG
实验五
试编写一汇编源程序:将一组有符号存储字节数据按从小到大的顺序排列。设数组变量为VAR,数组元素个数为N。
D SEGMENT
VAR DB -1, -10, -100, 27H, 0AH, 47H
N EQU $-VAR
D ENDS
C SEGMENT
ASSUME CS: C, DS:D
B: MOV AX, D
MOV DS, AX
MOV CX, N-1
MOV DX, 1
AG: CALL SUBP
INC DX
LOOP AG
MOV AH,4CH
INT 21H
SUBP PROC
PUSH CX
MOV CX, N
SUB CX, DX
MOV SI, 0
RECMP: MOV AL, VAR[SI]
CMP AL, VAR[SI+1]
JLE NOCH
XCHG AL, VAR[SI+1]
XCHG AL, VAR[SI]
NOCH: INC SI
LOOP RECMP
POP CX
RET
SUBP ENDP
C ENDS
END B
实验六
试编写一源程序:在显示器上显示“HOW ARE YOU?”,然后读一个字符。但不显示此字符,若读入字符是‘Y’,则显示“OK”。
解:程序如下:
D SEGMENT
D1 DB 'HOW ARE YOU?', 0DH, 0AH, '$'
D2 DB 'OK', 0DH, 0AH, '$'
D ENDS
C SEGMENT
ASSUME CS:C, DS:D
BG: MOV AX, D
MOV DS, AX
MOV DX, OFFSET D1
MOV AH, 9
INT 21H
MOV AH,8
INT 21H
CMP AL, 'Y'
JNE NEXT
LEA DX, D2
MOV AH, 9
INT 21H
NEXT: MOV AH, 4CH
INT 21H
C ENDS
END BG
实验七
试编写一源程序:屏幕显示“PASSWORD?”,随后从键盘读入字符串,并比较这个字符串与程序内部设定的字符串。若二者相同则显示“OK”,否则不作任何显示
(0DH是回车的ASCⅡ码)。
解: 程序如下:
D SEGMENT
PASS1 DB '12AB'
N EQU $-PASS1
D1 DB 'PASSWORD?', 0DH, 0AH, '$'
PASS2 DB 20
DB ?
DB 20 DUP(?)
D2 DB 0DH,0AH, 'OK$'
D ENDS
C SEGMENT
ASSUME CS:C, DS:D, ES:D
BG: MOV AX,D
MOV DS,AX
MOV ES,AX
LEA DX,D1
MOV AH,9
INT 21H
LEA DX,PASS2
MOV AH,0AH
INT 21H
LEA SI,PASS1
LEA DI,PASS2
CMP BYTE PTR[DI+1],N
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论