实验二 算术运算类指令(汇编语言基础指令学习一)

一、实验目的

算数运算类指令的用法

掌握:ADD/ADC/INC、SUB/SBB/DEC/ NEG/CMP
熟悉:MUL/IMUL、DIV/IDIV
理解:CBW/CWD、DAA/DAS、 AAA/ AAS/AAM/AAD

二、实验环境

DOSBox,debug

三、实验步骤

2.15 加法运算

mov al,fb  ; al = fbh
add al,07  ; al = 02h

在这里插入图片描述

按下回车,表明A命令操作结束,现在,只是把汇编指令放到了**内存 **之中,内存有东西了,寄存器还没有!

  • 因此,使用R命令寄存器 内容是没有变化的

  • 这时候要用D命令内存 就可以看到,内存里有我们自己写的东西了

在这里插入图片描述

我们可以看到 CS 和 IP 为 073F 和 0100 ,是我们刚刚开始写代码的位置,所以编译位置在这里不需要进行更改

如果CS和IP与你书写代码的位置不对 要修改

再用 T 命令逐步编译并且可以看到结果(T只执行每一步命令,所以你写了几行代码就T几行)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Q57eTdfo-1648552442843)(C:\Users\Arthur\AppData\Roaming\Typora\typora-user-images\image-20220329083521212.png)]

我们可以看到 ax 变成了 0002 因为ax包含ah和al ah为高8位 al为低8位

结果就是 al = 02h

mov word ptr[200],4652   ; [200h],4652h
mov bx,01fe              ; bx = 01feh
add al,bl                ; al = 00h
add word ptr[bx]         ; [200h] = 3742h

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EA0MIWpU-1648552442843)(C:\Users\Arthur\AppData\Roaming\Typora\typora-user-images\image-20220329084841900.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JEW1Us31-1648552442844)(C:\Users\Arthur\AppData\Roaming\Typora\typora-user-images\image-20220329085103668.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YAiggHYr-1648552442845)(C:\Users\Arthur\AppData\Roaming\Typora\typora-user-images\image-20220329085113676.png)]

最主要的是我们可以看到 内存单元 200 这个位置 我们刚刚写的 为 42 37 其实答案是37 42 不过高位在后 低位在前,这是8086操作系统内存中存储数据的方式。

然后我们看到了ax变成了0000 也就是 al 变成了00

符合实验结果

2.16 无符号双字加法运算

mov ax,4652   ; ax =4652h
add ax,f0f0   ; ax =3742h,cf=1   cf 表示进位标志
mov dx,0234   ; dx=0234h
adc dx,f0f0   ; dx=f25h,cf=0

上述程序段完成 dx.ax =0234 4652H + F0F0 F0F0H = F325 3742H

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xcTdlRPI-1648552442845)(C:\Users\Arthur\AppData\Roaming\Typora\typora-user-images\image-20220329090507627.png)]

写入的汇编指令在内存中

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-foKke0OK-1648552442846)(C:\Users\Arthur\AppData\Roaming\Typora\typora-user-images\image-20220329090647685.png)]

然后 按T 执行

最后按R 查看结果

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-eNZFfOhX-1648552442846)(C:\Users\Arthur\AppData\Roaming\Typora\typora-user-images\image-20220329090907952.png)]

增量指令INC

INC 指令对操作数加1(增量),是一个单操作数指令,操作数可以是寄存器或存储器

例如:

inc bx
inc byte ptr [bx]

2.17 减法运算

mov al,fb    ; al =fbh
sub al,07    ; al =fb -07h = f4h ,cf=0
mov word ptr[200],4652  ; [200h] = 4652h
mov bx,01fe             ; bx=01feh
sub al,bl               ; al =f6h ,cf =1
sub word ptr[bx+2],f0f0 ; [200h]=5562h,  cf=1

在这里插入图片描述
注意 在内存存储中 高位在后, 低位在前

2.18 无符号双字减法运算

mov ax,4652		;ax=4652h
sub ax,f0f0		;ax=5562h,of=0,sf=0,zf=0,af=0,pf=0,cf=1
mov dx,0234		;dx=0234h
sbb dx,f0f0		;dx=1143h,of=0,sf=0,zf=0,af=0,pf=0,cf=1

上述程序段完成 DX.AX =0234 4652H - F0F0 F0F0H = 1143 5562 H , 有借位CF = 1

增量指令DEC

DEC 指令对操作数减1(减量),是一个单操作数指令,操作数可以是寄存器或存储器

例如:

dec cx;
dec word ptr [si]

2.19 求补运算

求补指令 NEG

NEG也是一个单操作书指令,对操作数执行求补运算,即用零减去操作数,也可以表达成:将操作数按位取反后+1

mov ax,ff64	
neg al		;ax=ff9ch,of=0,sf=1,zf=0,pf=1,cf=1
sub al,9d	;ax=ffffh,of=0,sf=1,zf=0,pf=1,cf=1
neg ax		;ax=0001h,of=0,sf=0,zf=0,pf=0,cf=1
dec al		;ax=0000h,of=0,sf=0,zf=1,pf=1,cf=1
neg ax		;ax=0000h,of=0,sf=0,zf=1,pf=1,cf=0

执行前
在这里插入图片描述

执行后

在这里插入图片描述

2.20 cmp 比较指令 比较 AL是否大于100

cmp al,52
jb below		;below 为内容单元,如073F:0100  al < 52 跳转
sub al,52       ; al > 52继续
inc ah

在这里插入图片描述

这里我们不作演示

2.21 乘法指令

无符号数乘法

0B4H 与 11H 相乘

mov al,b4	;al=b4
mov bl,11	;
mul bl		;

执行前

在这里插入图片描述

t 三次 执行后

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nUx1LlJc-1648552442849)(C:\Users\Arthur\AppData\Roaming\Typora\typora-user-images\image-20220329180049870.png)]

有符号数乘法
mov al,b4
mov bl,11
imul bl

执行后

在这里插入图片描述

2.22 除法指令

执行前
在这里插入图片描述

无符号数除法

0400H 除以 B4H (高位除以低位)

mov ax,0400
mov bl,b4
div bl;

执行后

在这里插入图片描述

有符号数除法

0400H 除以 B4H (高位除以低位)

mov ax,0400
mov bl,b4
idiv bl;

执行后

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Jwi7S9im-1648552442851)(C:\Users\Arthur\AppData\Roaming\Typora\typora-user-images\image-20220329181108733.png)]

2.23 符号扩展

mov al,80	; al = 80
cbw			; ax = ff80
add al,ff	; al = 7f
cbw 		; ax = 007f

将al扩展到ax (低位向高位扩展)

执行前
在这里插入图片描述

执行后
在这里插入图片描述

2.24 进行有符号数除法 AX/BX

mov bx,0010
cwd
idiv bx;

在这里插入图片描述

2.25 压缩BCD码的加法运算

mov al,68	; al = 68h
mov bl,28	; bl = 28h
add al,bl	; 二进制加法 al = 68h+28h=90h
daa			; 十进制调整:al = 96h
			; 实现压缩BCD码加法:68+28=96

在这里插入图片描述

压缩BCD码的减法运算
mov al,68	; al = 68h
mov bl,28	; bl = 28h
sub al,bl	; 二进制加法 al = 68h-28h=40h
das			; 十进制调整:al = 40h
			; 实现压缩BCD码加法:68-28=40

在这里插入图片描述

2.26 已知AX=1234H,BX=4612H,计算1234-4612的值

mov ax,1234
mov bx,4612
sub al,bl
das
xchg al,ah
sbb al,bh
das
xchg al,ah	;ax=6622h,cf=1

执行前
在这里插入图片描述

执行后
在这里插入图片描述

2.27 非压缩BCD码的加法运算

mov ax,0608	; ax=0608h
mov bl,09	; bl=09h
add,al,bl	; al=08h+09h=11h ax=0611h
aaa			; 十进制调整 ax=0707h
			; 实现非压缩码bcd码加法:68+9=77

在这里插入图片描述

提示 bx应该等于0009 但是因为我一直在进行实验,所以 bx 高8位 bh 没有清空

非压缩BCD码的加法运算
mov ax,0608	; ax=0608h
mov bl,09	; bl=09h
sub,al,bl	; al=08h-09h=ffh ax=06ffh
aas			; 十进制调整 ax=0509h
			; 实现非压缩码bcd码加法:68-9=59

在这里插入图片描述

非压缩BCD码的乘法运算
mov ax,0608	; ax=0608h
mov bl,09	; bl=09h
mul bl	    ; ax=08h*09h=0048h
aam  		; 十进制调整 ax=0702h
			; 实现非压缩码bcd码乘法:8*9=72

在这里插入图片描述

非压缩BCD码的除法运算
mov ax,0608	; ax=0608h
mov bl,09	; bl=09h
aad			; 二进制扩展:ax=68=0044h
div bl		; 除法运算:商al=07h,余数ah=05h
			; 实现非压缩码bcd码除法:68/9=7...5

在这里插入图片描述

四、实验结果与问题分析

实验结果均没有问题,可称得上是一次完美的实验

  • 3
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

月亮&六便士

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值