前言
本次实验课要求,AX为2559,在屏幕上输出2559。每个数字以字符的形式输出,即分别输出‘2’,‘5’,‘5’,‘9’。
一、运行程序
DATAS SEGMENT
;此处输入数据段代码
DATAS ENDS
STACKS SEGMENT
;此处输入堆栈段代码
STACKS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
MOV AX,DATAS
MOV DS,AX
;此处输入代码段代码
;对AX赋值为2559,CL为10,BX计数
MOV AX,2559
MOV CL,10
MOV BX,0
L0:
;除法运算,压栈,判断AL是否为0,为0则跳到L1
DIV CL
PUSH AX
ADD BX,1
MOV AH,0
CMP AL,0
JE L1
JMP L0
L1:
;输出,出栈
CMP BX,0
JE OVER
POP CX
MOV DL,CH
ADD DL,48
MOV AH,2
INT 21H
SUB BX,1
JMP L1
OVER:
MOV AH,4CH
INT 21H
CODES ENDS
END START
二、理解程序
1.初始赋值
MOV AX,2559
MOV CL,10
MOV BX,0
为AX赋值初始值为2559,CL赋值为10,BX赋值为0
其中AX表示需要输出的数据
CL表示除数,接下来需要使用AX除以CL求出对应的商和余数
BX用于记录压栈的次数
2.除法运算
DIV CL
在汇编语言中,除法运算使用DIV,且固定为AX被除,AL中放置运算结束的商,AH放置运算结束的余数
AX÷CL=AL…AH
3.压栈和出栈
PUSH AX
POP CX
可以使用PUSH和POP对数据进行出栈和入栈操作。
4.条件转移指令
CMP AL,0
JE L1
比较AL和0,如果AL=0,那么就跳转到L1
条件转移指令Jcc中的cc表示利用标志判断的条件,一共有16种
助记符 | 中文说明 |
---|---|
JZ/JE | 等于0/相等 |
JNZ/JNE | 不等于0/不相等 |
JS | 符号为负 |
JNS | 符号为正 |
JP/JPE | “1”的个数为偶数 |
JNP/JPO | “1”的个数为奇数 |
JO | 溢出 |
JNO | 无溢出 |
JC/JB/JNAE | 进位/低于/不高于等于 |
JNC/JNB/JAE | 无进位/不低于/高于等于 |
JBE/JNA | 低于等于/不高于 |
JNBE/JA | 不低于等于/高于 |
JL/JNGE | 小于/不大于等于 |
JNL/JGE | 不小于/大于等于 |
JLE/JNG | 小于等于/不大于 |
JNLE/JG | 不小于等于/大于 |
5.JMP指令
JMP L0
跳转到L0