实验1 8086汇编指令编码和调试
四、实验结论
实验任务2
(1)使用d命令查看生产日期,发现为92年1月1日。
(2)使用e命令尝试修改,但失败了,原因:该区域为ROM区,ROM区不允许修改。
实验任务3
(1)使用e命令,向内存单元填写数据
(2)使用f命令,向内存单元批量填写数据

(3)尝试修改内存的数据
实验任务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)问题1:栈顶的逻辑地址为0020:0030,物理地址为00230H
(3)问题2:如图

(4)问题3:没有变化

(5)问题4:有变化
实验任务5
(1)问题1:单步执行完mov ss,ax后没有暂停,而是紧接着执行下一条指令,即mov sp,30,这是因为其修改了栈段寄存器SS。
(2)问题2:原先黄线上为IP和CS,随着数据入栈,也跟着往前移,同时值也和IP、CS保持一致,原因可能是:在响应中断时将CS、IP压入了栈中。
实验任务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)查看PSP

实验任务7:
(1)补全程序:第一空为cs,放入ds,因为要使代码被复制。第二空由复制结束命令位置可知为17H。
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

(2)复制成功,如图

五、实验总结
(1)使用Masm for Windows 集成实验环境可以简化汇编、链接的步骤,在编写较长程序时较为便利,并易于存储。
(2)各种存储器CPU在操作它们时都把它们当作内存对待,看成一个逻辑存储器,即内存地址空间,当我们向显存中写数据,数据就会被输出到显示器上。
(3)在实模式下,可以通过程序直接操作内存,没有对内存进行保护,很不安全。例如在编程时需要自己注意栈顶超界问题。保护模式相比于实模式,增加了一些控制寄存器和段寄存器。
实模式、保护模式与长模式区别
https://blog.csdn.net/qq_48322523/article/details/119935422
浙公网安备 33010602011771号