微机原理课的一道汇编题
记录下自己写的第一个汇编程序
1.题目要求
在内存数据段符号地址为SDATA处连续存放了60个无符号字节数据,试统计该60个数中能被13除尽的数的个数(该结果应存于数据段符号地址COUNT处)。要求:写出完整的数据段与代码段。
2.代码
DATA SEGMENT
SDATA DB 10 DUP (5)
DB 10 DUP (26)
DB 20 DUP (13)
DB 20 DUP (9) ;这里设置了60个数,能被13整除的有30个
COUNT DB 0
DATA ENDS
_STACKS SEGMENT STACK
DW 64 DUP (?)
_STACKS ENDS
CODE SEGMENT
ASSUME CS:CODE, DS:DATA, SS:_STACKS, ES:DATA
START: MOV AX,DATA
MOV DS,AX
MOV ES,AX
MOV AX,_STACKS
MOV SS,AX ;初始化各段首地址
LEA SI,SDATA
MOV CX,60
XOR AX,AX ;ax清零,存放余数和商
MOV BL,0 ;bl清零,存放个数
MOV BH,0DH ;bh存放除数:13
NEXT: MOV AL,[SI]
MOV AH,0
DIV BH ;AX%BH,余数放入AH,商放入AL
INC SI ;使si指向下一个被除数
CMP AH,0 ;判断余数是否为0
LOOPNZ NEXT ;cx不为0且余数不为0时跳转
CMP CX,0
JZ A1 ;cx若为0则结束循环
INC BL ;能被整除数+1
CMP AH,0
LOOPZ NEXT ;跳回去继续循环
A1: MOV COUNT,BL ;把最终结果写到COUNT处
HLT
CODE ENDS
END START
;OK VERSION
3.仿真结果
程序运行结束后各寄存器状态
然后是ds段内存区域的状态
可以看到BL所存放的结果为1EH,转换为十进制刚好为30。也就是说一共有30个数能被13整除,这与我们预设的数据相吻合