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

一、实验目的

1. 掌握8086CPU、寄存器、内存(包括栈空间)的基础知

2. 掌握汇编源程序组成与结构

3. 理解和掌握寄存器间接寻址方式[bx]

4. 掌握汇编指令mov, add, sub, jmp, push, pop,loop的用法,理解高级语言的表达和抽象机制

5. 熟练掌握使用debug工具编写和调试x86汇编命令的方法 6. 掌握汇编语言源程序编写→汇编→链接→调试的工具和方法

二、实验内容

实验任务1

实验任务2

在debug中,使用d命令查看生产日期

 

使用e命令修改生产时期所在的内存单元,

修改后,再次使用d命令查看

 

结论:无法修改, C0000 ~ FFFFF 是 只读存储器,无法用 e命令修改。

实验3

 在debug中,使用e命令,向内存单元填写数据。

-e b800:0 03 04 03 04 03 04 03 04 03 04

 

 在debug中,使用f命令,向内存单元批量填写数据。

-f b800:0f00 0f9f 03 04

 

修改内存单元的数据后,

 

实验任务4

填空:依次为002E、002C、002A、0028、002A、002C、002E、0030

问题1:指令 mov ss, ax 和 mov sp, 30 执行后, 栈顶的逻辑地址:0020:0030 ;物理地址:00230H。

问题2:

 

 问题3:

 

 问题4:

 

 

 实验任务5

问题1:不是单步执行完这一条指令就暂停,后面的指令 mov sp, 30 随之执行。

 

问题2:第一处存放下一条指令的地址,第二处表明随着push执行,地址往栈顶偏移。

 

 

 

 实验任务6

程序源码:

assume cs:code
 2 code segment
 3 start:
 4     mov cx, 10
 5     mov dl, '0'
 6     s: mov ah, 2
 7     int 21h
 8     add dl, 1
 9     loop s
10     
11     mov ah, 4ch
12     int 21h
13 code ends
14 end start

 

 

 

输出为0123456789

 

查看task6.exe的程序段前缀,程序前两个字节是为CD 20

实验任务7

assume cs:code
code segment
        mov ax,cs
        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

 

 

 

 

 

 三、实验总结

通过这次实验,我掌握了一些基本命令的使用以及debug、masm、link等一些工具的使用;对这些汇编指令编码进行了实践,加深了理解,同时也掌握了寄存器的间接寻址方式以及栈空间的知识。在这次实验中,我的实践能力得到了提升。

 

posted @ 2021-10-25 17:07  山林路  阅读(17)  评论(2编辑  收藏  举报