实验一:编程练习
1)
STACK
SEGMENT STACK
DW 64 DUP (?)
ENDS
SEGMENT
ORG 0500H ;起始地址
DB 25H, 30H, 32H, 34H, 65H
DB 5 DUP (?)
ENDS
SEGMENT
ASSUME DS: DATA, CS:
STACK
DATA
DATA1
DATA2
DATA
CODE
CODE
START: MOV AX, DATA
MOV DS, AX
MOV AH, 0FFH;
MOV CX, 05H;计数,五个数
LEA SI, DATA1
LEA DI, DATA2
NEXT: MOV AL, [SI]
CMP AL, 3AH;比较
JNC FF1;CF=0 转移
CMP AL, 30H
JC FF1;CF=1 转移
SUB AL, 30H
MOV [DI], AL
INC SI
INC DI
LOOP NEXT;CX≠0 则循环
JMP DONE
MOV [DI], AH;把 FFH 存入
JMP BACK
BACK:
FF1:
DONE: MOV AH, 4CH
CODE
INT 21H;程序退出
ENDS
END START
2)
STACK SEGMENT STACK
DW 64 DUP (?)
STACK ENDS
DATA
SEGMENT
ORG 0500H
DW 00AAH
ORG 0510H
DB 5 DUP (?);0510H-0514H
ENDS
SEGMENT
ASSUME DS: DATA, CS:
DATA1
DATA2
DATA
CODE
CODE
START: MOV AX, DATA
MOV DS, AX
MOV SI, OFFSET DATA1
MOV DI, OFFSET DATA2
MOV CX, 05H;计数,五位
MOV AX, [SI]
XOR DX, DX;清空 DX
MOV BX, 0AH
DIV BX;DL,AX/BX 的余数?
ADD DL, 30H;变为 ASCII
MOV [DI], DL
INC DI
LOOP DONE;CX≠0 则循环
MOV AH, 4CH
INT 21H
ENDS
END START
DONE:
CODE
实验二:编程练习
2)
STACK
A:
SEGMENT STACK
DW 64 DUP (?)
ENDS
SEGMENT
ORG 0500H
DB 10H, 20H, 30H, 40H, 50H,
ORG 0510H
DB ?
SEGMENT
ASSUME DS: DATA, CS:
CODE
STACK
DATA
DATA1
60H
DATA2
CODE
MOV AH, 4CH
INT 21H
ENDS
END START
CODE
2)OPTIONAL 可选(不太懂)
START: MOV AX, DATA
MOV DS, AX
MOV SI, OFFSET DATA1
MOV DI, OFFSET DATA2
MOV CX,0006H
MOV AX,0000H
MOV BL, [SI]
INC SI
ADD AL, BL
ADC AH,00H;带进位的加法
LOOP A
MOV CL,06H
DIV CL
MOV AH,00H
MOV BL,0AH
DIV BL
MOV BH, AH
MOV BL,10H
MUL BL
ADD AL, BH
MOV [DI], AL
MOV AH,4CH
INT 21H
ENDS
END START
CODE
START: MOV AX, DATA
A1:
MOV DS, AX
MOV SI, OFFSET DATA1
MOV DI, OFFSET DATA2
XOR DX, DX;清空
MOV CX, 6;计数
MOV AL, [SI]
CBW;AL 扩展为 16 位 AX
ADD DX, AX
INC SI
LOOP A1
MOV AX, DX
MOV BL, 06H
DIV BL
MOV BL, 0AH;??
DIV BL;详细见后面
MOV [DI], AX
3)
STACK SEGMENT STACK
DW 64 DUP (?)
STACK ENDS
DATA
SEGMENT
ORG 0500H
DB 10H, 15H, 0FH
ORG 0510H
DB 3 DUP (?)
ENDS
SEGMENT
ASSUME DS: DATA, CS:
DATA1
DATA2
DATA
CODE
CODE
START: MOV AX, DATA
MOV DS, AX
MOV SI, OFFSET DATA1
MOV DI, OFFSET DATA2
MOV AL, [SI]
MOV BL, [SI+1]
ADD AL, BL
MOV BL, [SI+2]
ADD AL, BL
MOV CL,02H
SALAL, CL;算术左移 2 位
MOV AH,00H
MOV CX,03H
XOR DX, DX;清空 DX
MOV BX, 0AH
DIV BX;十六进制转 BCD
MOV [DI], DL
INC DI
LOOP DONE
MOV AH, 4CH
INT 21H
ENDS
DONE:
CODE
END START
实验三:编程练习
1)
STACK
STACK
DATA
DATA
SEGMENT STACK
DW 64 DUP (?)
ENDS
SEGMENT
SEGMENT
ORG 0500H
DB 09H 数 据 个 数 ,12H, 80H,
DATA1
78H, 0C8H, 00H, 00H, 0FEH, 99H, 34H
DATA2
DATA
CODE
ORG 0510H
DB 3 DUP (?)
ENDS
SEGMENT
ASSUME DS: DATA, CS:
CODE
START: MOV AX, DATA
MOV DS, AX
MOV SI, OFFSET DATA1
MOV DI, OFFSET DATA2
MOV CL, [SI];计数数据次数
MOV CH,00H
MOV BH,00H
MOV BL,00H
MOV DL,00H
INC SI
MOV AL, [SI]
CMP AL, 0
JLE A2
INC BH;正数加一
JMP OVER
A2:
A1:
A1:
A2:
A3:
OVER:
CODE
CMP AL, 0
JL A3
INC BL;零加一
JMP OVER
INC DL;负数加一
INC SI;判断次数
LOOP A1
MOV [DI], BH;正数
MOV [DI+1], DL;负数
MOV [DI+2], BL;零
MOV AH,4CH
INT 21H
ENDS
END START
2)
STACK SEGMENT STACK
DW 64 DUP (?)
STACK ENDS
DATA
SEGMENT
ORG 0200H
DB 3 DUP (?)
ORG 0204H
DW ?
ENDS
SEGMENT
ASSUME DS: DATA, CS:
DATA1
DATA2
DATA
CODE
CODE
START: MOV AX, DATA
MOV DS, AX
LEA SI, DATA1
LEA DI, DATA2
MOV AL, [SI]
MOV AH, [SI+1]
MOV BL, [SI+2];将三数移到
CMPAL, AH
JZ A1
CMPAL, BL;详细看后面
JZ A2
MOV [DI], SI
JMPA4
INC SI
MOV [DI], SI
JMPA4
CMPAL, BL
JZ A3
ADD SI, 2
MOV [DI], SI
JMPA4
A3:
A4:
CODE
MOV [DI], 0FFFFH;相同
MOV AH, 4CH
INT 21H
ENDS
END START
实验四:编程练习
1)
STACK
SEGMENT STACK
DW 64 DUP (?)
ENDS
SEGMENT
STR1 DB 0AH, 0DH,
'Input
STACK
DATA
two numbers A & B: $'
ORG 0204H
DB 3 DUP (?)
ENDS
SEGMENT
ASSUME DS: DATA, CS:
DATA1
DATA
CODE
CODE
START: MOV AX, DATA
A:
MOV DS, AX
MOV DX, OFFSET STR1
MOV AH, 09H;显示字符串
INT 21H
MOV AH, 01H 输入单字符
INT 21H
CMP AL, 0DH
JZ OVER
SUB AL, 30H
MOV BL, AL
MOV AH, 01H;输入单字符
INT 21H
CMP AL, 0DH;
“回车(0AH)”和“换行(0DH)”
JZ OVER
MOV AH, 00H
SUB AL,30H
ADD AL, BL
AAA;将 AL 的和调整到 BCD 格式
ADD AH, 30H
MOV DL, AH
MOV BH, AL
MOV AH, 02H;显示单 ASCII
INT 21H
ADD BH, 30H
MOV DL, BH
MOV AH, 02H 显示单 ASCII
INT 21H
JMP A
JMP OVER
A3:
ADD DX,0CH
OVER: MOV AH,09H
INT 21H
JMPA1
MOV AH,4CH
INT 21H
ENDS
END START
EX:
CODE
DIV src:AX 除以 src 中的值 商放 AL 余
数放 AH(8 位)
DIV src:(DX,AX)除以 src 中的值 商放
AX 余数放 DX(16 位)
CMP AX,BX 的逻辑含义是比较 AX,BX
中的值。如果执行后:
ZF=1 则 AX=BX
ZF=0 则 AX!=BX
SF=1 则 AX=BX
SF=0 并 ZF=0 则 AX>BX
SF=1 或 ZF=1 则 AX<=BX
OVER: MOV AH, 4CH
CODE
INT 21H
ENDS
END START
2)判断两个数大小,输出 A>B
STACK SEGMENT STACK
DW 64 DUP (?)
STACK ENDS
DATA
SEGMENT
STR1 DB 0AH, 0DH, 'Input
data A:$', 0AH, 0DH, 'Input data B: $'
STR2 DB 0AH, 0DH, 'A>B$',
0AH, 0DH, 'A=B$', 0AH, 0DH, 'A