汇编语言程序设计实验3 算术及移位指令实验

【实验目的】

掌握多数位的算术运算、移位操作、字符串操作等程序的设计,学习使用分支与循环等基本编程方法,熟练使用Debug。

【实验内容】

【1】在数据段预先存放16个十六进制数的ASCII码,首地址为ASC。从键盘输入一位十六进制数到BX,用ASC[BX]寻址方式找到对应数位的ASCII码,并取出显示。

【2】用16位指令编制程序,处理32位的加减乘除算术四则运算题。

要求:

(1)所有变量均定义成字类型,其中应有负数。部分变量也可以使用寄存器,在Debug下临时给出。程序必须在Debug下执行,以便验证结果。

(2)跟踪程序,记录每条指令执行后的ZF,SF,CF,OF标志。回答每条指令执行后ZF,SF,CF,OF标志设置的理由。

【4】AL字节内容反向排序。

【实验问题与解决】

【1】代码3-1.asm:

运行测试(第一个字符为输入,第二个为输出。符合预期结果):

【2】Part1:32位数加减法

实验思路:令A=142857(00022E09H),B=666666(000A2C2A),令寄存器AX、BX分别存放A的高位和低位,CX、DX分别存放B的高位和低位。

编写如下代码3-2-1.asm:

编译链接(略)后使用debug单步执行,执行运算前各寄存器状态如下:

单步执行,各寄存器状态如下:

运算结果:加法的答案为(AX,BX)=(000C 5A33)=142857+666666;减法的答案为(CX,DX)=(FFFD D1F7)=-A(-142857的补码),均符合预期。

各标志位变化如下表:

ZF

SF

CF

OF

开始前

NZ

PL

NC

NF

ADD BX,DX

PL

NC

ADC AX,CX

PL

NC

SUB DX,BX

NG

CY

SBB CX,AX

NG

CY

解释:ZF为是否为零,全程均未出现运算结果未0;OF为是否溢出,全程也未出现过溢出;SF为符号位,在加法运算时结果显然为正;在减法运算是由于减数大于被减数,所以符号为负;CF为是否有进位,在加法时低位没有向高位进位,而最后减法时进行了借位。

Part2:32位数乘除法

令AX=2333(091DH),BX=6666(1A0AH),实验乘除法:

执行完乘法语句后(DX,AX)=(ED4D22H)=2333*6666;执行完除法后AX=(DX,AX)/BX=原来的a,符合题意。

【4】思路:将结果存放在寄存器BL中,每次令BL左移一位后加上BL除以2得到的余数,重复8次BL的值即为AL字节内容反向排序的结果。

代码3-4.asm:

编译链接:

使用debug进行测试

可以看到BL的值为4BH(01001011B),为原来AL=11010010B的反向排序。

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值