第一题:
Debug查看:
1、常规操作:将Data数据段由AX寄存器送入DS数据段
2、设置CX寄存器中需要的循环次数
3、设置DI寄存器的偏移量
4、清空AX寄存器,便于后续观察
5、将AL,即数组的第一个元素送入MAX和MIN变量中
6、DI指针++后移一位
7、AL与MAX内存中的内容进行比较
8、若AL中的值大于MAX的值,则跳转
9、逐次循环,直到将AX赋值为4C00H时,返回DOS状态
10、最终运行结果为:
AH = 64h = 100D
AL = 2EH = 48D
符合预期结果
补充:
为了便于演示,这边利用堆栈结构做了一个输出程序,但是并不完善
*;为了方便演示,下面做一个输出*
print:
cbw
MOV cl,10 *;CL是每次除以10*
MOV ch,0*; 计算除了多少次,也就是有几位*
L0:
DIV cl
push ax
inc ch
MOV ah,0
CMP ax,0
jne L0
again:
CMP ch,0
je over
pop dx
MOV dl,dh
ADD dl,48
MOV ah,2
int 21H
DEC ch
JMP again
over:
MOV AX,4C00H
INT 21H
第二题:
Debug输出:
1、常规操作:将data数据段由AX寄存器送入DS代码段
2、将BL寄存器内容初始化为0,便于后续观察
3、将CX寄存器内容设置为10,设置循环次数
4、左移一个字的长度
5、发生进位,跳转到ch1中
6、BL自增+1
7、如此循环,知道AX中为4c00h,返回DOS状态
8、最终BL=9h,说明有9个1,符合预期结果。
代码下载:
mission1.asm
mission2(3).asm.asm%22%2C%22size%22%3A740%2C%22ext%22%3A%22txt%22%2C%22source%22%3A%22%22%2C%22status%22%3A%22done%22%2C%22download%22%3Atrue%2C%22taskId%22%3A%22ubce89d72-255e-4f77-9b2c-b34662d09c2%22%2C%22taskType%22%3A%22upload%22%2C%22type%22%3A%22text%2Fplain%22%2C%22__spacing%22%3A%22both%22%2C%22mode%22%3A%22title%22%2C%22id%22%3A%22u709bd039%22%2C%22margin%22%3A%7B%22top%22%3Atrue%2C%22bottom%22%3Atrue%7D%2C%22card%22%3A%22file%22%7D)