实验1 用机器指令和汇编指令编程
机器码 汇编指令 b8 20 4e mov ax,4E20H 05 16 14 add ax,1416H bb 00 20 mov bx,2000H 01 d8 add ax,bx 89 c3 mov bx,ax 01 d8 add ax,bx b8 1a 00 mov ax,001AH bb 26 00 mov bx,0026H 00 d8 add al,bl 00 dc add ah,bl 00 c7 add bh,al b4 00 mov ah,0 00 d8 add al,bl 04 9c add al,9CH


第二种方法:使用a命令写入内存,同时用使用t命令单步调试,如图所示:


分析可知:每执行一次t命令,CS不变,IP增加3.
(2)实验任务2
将下面3条指令写入从2000:0开始的内存单元中,利用这3条指令计算2的8次方
mov ax,1 add ax,ax jmp 2000:0003
用a命令写入指令,如图所示:

因为如果要执行2000:0开始的内存单元,必须要修改CS:IP,则如图所示:

随后用t指令不断进行单步调试:




循环执行八次后可知,AX=0100H=256(10) 即2^8。
分析:AX作为累加单元,初始值为0001。
JMP为立即数,表示将立即数转移到IP中,执行结果中CS:IP不断跳回2000:0003,起循环作用。
(3)实验任务3
查看内存中的内容,PC机主板上的ROM中写有一个生产日期,在内存FFF00H~FFFFFH的某几个单元中,请找到这个生产日期并试图改变它。
用d命令查看内存FFF00H~FFFFFH内容,如图所示:

可得生产日期为1992年1月1日。
试图修改内容后,发现失败,可得其地址为该地址为ROM地址空间(只读)

分析:地址C0000~FFFFF的内存单元为各类ROM地址空间。
(4)实验任务4
向内存从B8100H开始的单元中填写数据,例如:

可得:
输入:
可得:
输入:
可得:
分析:8086中A0000~BFFFF为显存地址空间,在B8100H开始的单元中填写数据会被读取并解析为对应的屏幕信息并显示。
2. 实验2
(1)实验任务1
使用Debug,将下面的程序段写入内存,逐条执行,根据指令执行后的实际运行情况填空。
mov ax,ffff mov ds,ax mov ax,2200 mov ss,ax mov sp,0100 mov ax,[0] ;ax=_____ add ax,[2] ;ax=_____ mov bx,[4] ;bx=_____ add bx,[6] ;bx=_____ push ax ;sp=_____ ; 修改的内存单元的地址是_____内容为_____ push bx ;sp=_____ ; 修改的内存单元的地址是_____内容为_____ pop ax ;sp=_____ ; ax=_____ pop bx ;sp=_____ ; bx=_____ push [4] ;sp=_____ ; 修改的内存单元的地址是_____内容为_____ push [6] ;sp=_____ ; 修改的内存单元的地址是_____内容为_____
为了便于验证实验结果,做如下两点调整:
① 在使用 a 命令输入指令调试之前,先使用 e 命令将内存单元 0022:0 ~0022:7连续 8 个字节数据修改为 50H, 51H, 52H, 53H, 54H, 55H, 56H, 57H
② 将 P74 实验任务(1)中第1行的 mov ax, ffff → 改为 mov ax, 0022
使用e命令修改内存单元0022:0~0022:7的数据,并用a命令输入指令:

指令单步调试:



填空结果为如图所示,与预估结果相符。:
mov ax,[0] ;ax=5150H add ax,[2] ;ax=A4A2H mov bx,[4] ;bx=5554H add bx,[6] ;bx=ACAAH push ax ;sp=00FEH ; 修改的内存单元的地址是2200:00FE内容为A4A2H push bx ;sp=00FCH ; 修改的内存单元的地址是2200:00FC内容为ACAAH pop ax ;sp=PPFEH ; ax=ACAAH pop bx ;sp=00FCH ; bx=A4A2H push [4] ;sp=00FEH ; 修改的内存单元的地址是2200:00FE内容为5554H push [6] ;sp=00FCH ; 修改的内存单元的地址是2200:00FC内容为5756H
(2)实验任务2
仔细观察图3.19中的实验过程,然后分析:为什么2000:0~2000:f中的内容会发生改变?
使用 a命令输入指令,使用 e 命令修改2000:0~2000:f 的值:

用t命令单步调试:



1.将2000H放入AX寄存器
2.用AX寄存器的值放入段寄存器SS
3.将10H放入寄存器SP
注意:mov ss,ax和mov sp,0100一起执行。
二、实验总结
1.用jmp指令可以起到循环效果。
2.使用t命令可以更好地了解指令运行情况

浙公网安备 33010602011771号