汇编语言(第三版)实验 Chapter4

 

本章核心

写一个程序计算2^3

代码如下:

assume cs:abc

abc segment

    mov ax,2
    add ax,ax
    add ax,ax

    mov ax,4c00H
    int 21H

abc ends


end

 

网上下载了masm5.0工具包,解压到文件夹d:\masm\下

 

运行dosbox

mount c d:\masm\

c:

 

然后编译和链接,一路回车,生成ex1.exe

masm ex1.txt
link ex1.obj

最后debug ex1.exe即可

先看CX=000C,表示程序长度为十六进制的C,即12字节。

 

由于程序装入内存后,会有256字节的PSP区域。

DS=075AH,SP=0,指向PSP的开头。

而经过256字节,即075AH+10H=076AH:0,来到第一条指令的位置,恰为CS:IP的值076A:0,表示程序入口。

由于debug默认所有数据都用16进制表示,所以0002没有带H。

 

-u查看指令。

由于程序长度只有C,所以只需要看到076A:0000~000B即可。

发现指令内容,同我们在1.txt中写入的汇编指令完全一致。

 

t执行命令。

算完2^3,mov ax,4C00。

来到int 21H这一行,要用p执行。

 

由于本例是debug程序载入的ex1.exe,所以运行结束回到debug程序。

 

q退出debug,回到command。

 

 

实验3

 

assume cs:codesg

codesg segment


    mov ax,2000H
    mov ss,ax
    mov sp,0
    add sp,10
    pop ax
    pop bx
    push ax
    push bx
    pop ax
    pop bx

    mov ax,4c00H
    int 21H


codesg end

end

 

t执行

 

t执行

栈顶变为SS=2000,SP=0000

 

t执行

SP=000A

 

t执行

读出SS:SP=2000:000A处的值0000赋值给AX,然后SP+=2,得到SP=000C。

 

t执行。

读出SS:SP=2000:000C处的值0000复制给BX,然后SP+=2,得到SP=000E

 

t执行

SP-=2得到SP=000C

将AX中的值0000,存入SS:SP=2000:000C~000D位置

 

t执行

SP-=2得到SP=000A

将BX中的值0000,存入SS:SP=2000:000A~000B位置

 

最后两条

pop AX

pop BX

就不放了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值