实验1 8086汇编指令编码和调试

1.实验任务2

使用d命令后的截图:

 使用e修改生产日期所在的存储单元后,再次用d命令查看:

 使用后发现,存放生产日期的内存单元并没有发生改变,所以无法修改存放生产日期的内存单元。因为该段内存在ROM中,为只读存储器,无法进行修改。

 

2.实验任务3

第一步命令效果截图如下:

 第二步命令效果截图如下:

 修改内存单元或数据的效果截图如下:

 

3.实验任务4

 填空结果如下: 022eh  022ch   022ah   0228h   022ah   022ch   022eh   0230h

问题一:栈顶逻辑地址:0020:0030 ;逻辑地址:00230h

问题二:

问题三:

问题四:

 

 

4.实验任务5

问题一:不是。指令mov sp, 30是紧跟着指令mov ss, ax执行的。

问题二:00220h~0022fh内存单元值的变化,说明CS和IP的值存在该内存单元内。

 

5.实验任务6

效果截图如下:

运用debug工具调试task6.exe后,效果截图:

 前两个字节是CD 20。

 

6.实验任务7

补全后的完整代码

assume cs:code
code segment
    mov ax, cs
    mov ds, ax
    mov ax, 0020h
    mov es, ax
    mov bx, 0
    mov cx, 23
    s: mov al, [bx]
    mov es:[bx], al
    inc bx
    loop s

    mov ax, 4c00h
    int 21h
code ends
end

第一空,因为将把 mov ax, 4c00h 之前的指令复制到内存0:200开始的 连续的内存单元,所以将代码段cs首地址存入寄存器ax中,所以第一空填入cs。

第二空,是代码段的长度。先暂时填入一个数运行代码,在debug中查看代码段长度,如下:

 

 得知mov ax, 4c00h之前的代码长度为17h,转化为十进制为23,所以将23填入第二空中。

debug中g命令执行后效果截图如下:

 

 使用u命令后效果截图如下:

 

 

7.实验总结

(1)在debug中,可以通过不同的命令来对内存单元进行操作,但对于只读存储器内的内容无法对其中的内存单元进行修改。

(2)寄存器cx中存储着代码段的长度。

(3)可以通过masm、link来对程序编译链接,从而运行;运用debug观察程序内存状态。

 

posted @ 2021-10-23 23:35  抬头不见低头见  阅读(123)  评论(3)    收藏  举报