实验一 8066汇编指令编码和调试
2.实验任务二
(1)在debug中,使用d命令查看生产日期

日期为01/01/92
(2)使用e命令修改生产时期所在的内存单元,修改后,再次使用d命令查看

3.实验任务三
(1)在debug中,使用e命令,向内存单元填写数据。
-e b800:0 03 04 03 04 03 04 03 04 03 04 从b800:0开始的内存单元开始,依次写入十六进制数据04 03,重复写5次。

(2)在debug中,使用f命令,向内存单元批量填写数据。
-f b800:0f00 0f9f 03 04
把内存单元区间b800:0f00 ~ b800:0f9f连续160个字节,依次重复填充十六进制数据03 04

地址改变,观察结果

左上角的图案因为地址的改变而发生了变化,不同的数据控制着不同的颜色和样式,不同的地址控制着不同的位置。
(任务二-三:MacOS环境测试)
4.实验任务四
根据在debug环境中调试观察结果,填空并回答问题。
填空

(sp) = 002EH
(sp) = 002CH
(sp) = 002AH
(sp) = 0028H
(sp) = 002AH
(sp) = 002CH
(sp) =002EH
(sp) = 0030H
问题1-answer:
逻辑地址 0020:0030;物理地址 00230H
问题2-answer:
![]()
问题3-answer:
![]()
问题4-answer:
在改变顺序之后,顺序发生了改变。而顺序发生改变的根本原因是:在出栈的时候顺序发生了改变。
5.任务5
1.问题1-answer:
(1) 是的,暂停了
(2)因为当t命令被使用的时候只有一条指令被执行。而再次使用t命令,mov sp 30相应地将会被执行。
2.问题2-answer:
代码执行,代码的偏移地址会发生变化;0108->010B->010C->010F->0110
数据入栈,栈顶指针不断向下移,栈偏移地址不断变化;30->2E->2C
6.实验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
6-2-1:使用masm、link对程序汇编链接过程截图如下:

6-2-2: 运行可执行程序task6.exe的运行结果截图如下:


7.任务7
7-1:源代码:
assume cs:code code segment mov ax, _cx____ mov ds, ax mov ax, 0020h mov es, ax mov bx, 0 mov cx, _17h__ s: mov al, [bx] mov es:[bx], al inc bx loop s mov ax, 4c00h int 21h code ends end
7-1.1 第一个空:ds的值保存的是段地址cs
7-1.2 第二个空:由于每次循环只复制一个字节,所以循环次数就会等于最终程序的长度。显然地,程序循环了17次,所以程序的长度是17h;
(2)在debug中调试,使用g命令将程序执行到 loop s 之后、 mov ax, 4c00h 之前,然后,使用u命令对0:200开始的内存单元反汇编,确认是否把task7.asm中line3-line12的代码复制到了目标内存空间。
(3)给出使用g命令运行到指定点和使用u命令反汇编0:200到复制代码长度这一段内存空间的截图。

浙公网安备 33010602011771号