实验一 8086汇编指令编码和调试
四、实验结论
2.实验任务2
(1)使用d命令查看生产日期
-d FFF0:0 FF

日期为01/01/92
(2)使用e命令修改内存中的内容
-e FFF0:00F0 1 2 3 4 5 6 7 8 9
使用d命令再次查看生产日期对应的内存单元
-d FFFF:0 F

结论:不能修改,这段地址空间实际是ROM的地址空间,对应的单元实际上是ROM存储器的一个存储单元,对其进行写入数据的操作对应内存单元内容不会改变。
3.实验任务3
(1)用e命令向内存单元b800:0重复写入数据03 04
-e b800:0 0 03 04 03 04 03 04 03 04 03 04

(2)用f命令批量填充03 04数据到内存单元b800:0f00开始的单元
-f b800:0f00 0f9f 03 04

(3)修改内存单元的情况
![]()
4.实验任务4
(1)调试观察结果
-a mov ax, 20 mov ds, ax mov ss, ax mov sp, 30 push [0] ; 执行后,寄存器(sp) = _002E___ push [2] ; 执行后,寄存器(sp) = _002C__ push [4] ; 执行后,寄存器(sp) = _002A__ push [6] ; 执行后,寄存器(sp) = _0028__ pop [6] ; 执行后,寄存器(sp) = _002A___ pop [4] ; 执行后,寄存器(sp) = __002C__ pop [2] ; 执行后,寄存器(sp) = __002E__ pop [0] ; 执行后,寄存器(sp) = __0030__
(2)问题
问题一:栈顶的逻辑地址为0020:30 物理地址为00230
问题二:
![]()
问题三:
![]()
问题四:
![]()
5.实验任务5
问题一:单步执行mov ss,ax时没有发生暂停,下一条指令mov sp,30也紧接着执行了。
问题二:
![]()
其中黄色下划线的数据为CS IP的数值,因为当进行t命令的单步执行操作时,发生中断,使用栈空间存放cpu关键数据。
6.实验任务6
(1)程序源码
assume cs:code code segment start: mov cx,10 mov dl,'0' s: mov ah,2 int 21h add dl,1 loop s mov ah,4ch int 21h code ends end start
(2)汇编、链接、运行过程

![]()
(3)在debug中查看程序段前缀PSP

7.实验任务7
(1)程序源码
assume cs:code code segment mov ax, __cs___ mov ds, ax mov ax, 0020h mov es, ax mov bx, 0 mov cx, __17___ s: mov al, [bx] mov es:[bx], al inc bx loop s mov ax, 4c00h int 21h code ends end
cs中存放程序的段地址,所以利用寄存器ax将cs的值赋给ds;
mov指令用于寄存器间传递数据时为3个字节,用于寄存器和立即数之间传递数据时为2个字节。上述程序共23个字节,16进制为17。
(2)先使用u命令对程序反汇编,查看到loop指令的内存地址为076A:0015

使用g命令将程序执行到loop指令之后
-g 0017

用u命令反汇编0020:0开始的字节单元内容
-u 0020:0 16

已经实现把task7.asm中line3-line12的代码复制到了目标内存0:200.
浙公网安备 33010602011771号