ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

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

2021-10-23 13:31:59  阅读:97  来源: 互联网

标签:编码 8086 sp mov 命令 寄存器 ax 执行 调试


1.实验任务1

 

2.实验任务2

利用d命令查看生产日期为01/01/92

试图利用e命令修改生产日期,并用d命令再次查看,发现生产日期没有改变

 

 结论:生产日期不可修改,是由于该内存地址为ROM,ROM中的信息不可被更改

 

3.实验任务3

用e命令向指定内存单元b800:0填写数据 04 03,重复五次;可在左上角观察到输出结果“5个红色爱心”,结果如下:

 再用f命令向指定内存单元b800:0f00重复填写数据04 03

使用d命令观察到数据已经被写入到内存中,但没有任何输出结果

 修改b800:0 9中的数据,观察到不同的输出结果

 

 造成上述情况的原因是:在8086中,地址A0000H~BFFFFH为显存地址空间,数据会呈现为输出结果显示在输出设备上

 

4.实验任务4

利用e命令,修改00200H~00207H内存单元中的数据为10 20 30 40 50 60 70 80

填空:

-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

 

1)在t命令单步执行后,执行push指令SP=SP-2,执行pop指令SP=SP+2;

mov ss,ax和mov sp,30执行后,

栈顶的逻辑地址为:0020:0030,实际地址为:00230H

 

 

2)在执行完push[6],且还未执行pop[6]时,用d命令查看栈内存中数据如下:

 

 3)在执行完pop[0],用d命令查看栈内存中数据如下:

 

4)改变后四条指令如下:

 

发现数据空间内的数据呈倒序排列:

 

5.实验任务5

 问题1:用t命令执行mov ss,ax后没有暂停,mov sp,30紧接着得到执行

即Debug的T命令在执行修改寄存器SS的指令时,下一条指令也紧接着被执行

 问题2:00220H~0022fH被设置为栈,且值均为0,

程序段中将栈顶指针设为了0020:0030,指向栈的中间

 CS:IP与栈中值相同,即第一条程序存放在栈中

 

6.实验任务6

编写如下8086汇编程序源码

task6.asm

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

汇编链接过程截图

  

 可执行程序task6.exe执行结果:

 

 

 

 在debug中,用d命令查看PSP,前两个字节为CD 20

 

 

 

7.实验任务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

1)CS:IP指向了第一条程序,因而若要复制整个程序,需要将段地址cs赋值给寄存器ds,所有第一个空为cs

     除去最后两条返回指令,其余指令长度为17h(2+2+3+2+3+3+2+2+2+2=23=17h),cx中为控制循环次数的数

2)先使用u命令,查看反汇编代码

 

 由LOOP的物理地址可知,用命令“g 076a:0017”将程序执行到loop s之后,mov ax,4c00之前

然后用u命令对0:200进行反汇编,得到结果:

得以验证该程序是正确的

标签:编码,8086,sp,mov,命令,寄存器,ax,执行,调试
来源: https://www.cnblogs.com/2201589821sbc/p/15438106.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有