实验一 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到复制代码长度这一段内存空间的截图。

 

 

 

posted @ 2021-10-25 23:50  Whiiplash_jupiter  阅读(319)  评论(3)    收藏  举报