第一题:

Debug查看:

1、常规操作:将Data数据段由AX寄存器送入DS数据段
image.png
2、设置CX寄存器中需要的循环次数汇编语言上机报告3 - 图2
3、设置DI寄存器的偏移量
image.png
4、清空AX寄存器,便于后续观察
image.png
5、将AL,即数组的第一个元素送入MAX和MIN变量中
image.png
6、DI指针++后移一位
image.png
7、AL与MAX内存中的内容进行比较
image.png
8、若AL中的值大于MAX的值,则跳转
image.png
9、逐次循环,直到将AX赋值为4C00H时,返回DOS状态
image.png
10、最终运行结果为:
AH = 64h = 100D
AL = 2EH = 48D
符合预期结果

补充:

为了便于演示,这边利用堆栈结构做了一个输出程序,但是并不完善

  1. *;为了方便演示,下面做一个输出*
  2. print:
  3. cbw
  4. MOV cl,10 *;CL是每次除以10*
  5. MOV ch,0*; 计算除了多少次,也就是有几位*
  6. L0
  7. DIV cl
  8. push ax
  9. inc ch
  10. MOV ah,0
  11. CMP ax,0
  12. jne L0
  13. again:
  14. CMP ch,0
  15. je over
  16. pop dx
  17. MOV dl,dh
  18. ADD dl,48
  19. MOV ah,2
  20. int 21H
  21. DEC ch
  22. JMP again
  23. over:
  24. MOV AX,4C00H
  25. INT 21H

第二题:

Debug输出:

1、常规操作:将data数据段由AX寄存器送入DS代码段
image.png
2、将BL寄存器内容初始化为0,便于后续观察
3、将CX寄存器内容设置为10,设置循环次数
image.png
4、左移一个字的长度
image.png
5、发生进位,跳转到ch1中
image.png
6、BL自增+1
image.png
7、如此循环,知道AX中为4c00h,返回DOS状态
image.png
image.png
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)