AHU-汇编实验二 -算术运算处理程序

实验内容:

第一题:

1.用16位指令编制程序,处理16位带符号数的计算:((a+b)-(c x d))/e,其中a、b、c、d、

e均为16位带符号数。要求:

(1)商和余数存放在内存中

(2)在调试状态下,在看加法运算后的结果及ZF、SF、CF、OF标志位情况,并分析原因

(3)在调试状态下,查看数据段数据的存储情况

DATA SEGMENT 
A DW 0014H
B DW 0018H
C DW 0004H
D DW 0002H
E DW  0002H
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START:
MOV AX,DATA
MOV DS,AX
MOV AX,A
ADD AX ,B  
MOV CX,AX
MOV BX,DX  
MOV AX,C
CWD
IMUL D
SUB AX,CX
SBB DX,BX
IDIV E
MOV A,AX
MOV B,BX
MOV AH,4CH
INT 21H
CODE ENDS
END START
  • 相关知识:
  • 结果不为0,zf显示NZ(not zero),结果为0,zf显示ZR(zero)
  • SF为符号,结果为负,SF=1,显示NG(negative number);如果非负,SF=0,显示PL(positive number)
  • CF,进位标志位,CF为CY(carry),表示进位;CF为NC(not carry),表示没有进位
  • OF为NV(not over flow),表示没有溢出OF为OV(over flow),表示溢出

解答:

(2)加法运算后的结果为002C,ZF结果为NZ即不是0,SF为PL即正数,CF为NC即没有进位,OF为NV即没有溢出

(3)

第二题

2.双字长数X存放在DX和AX中,设(DX)=1004H,(AX)=1002H,编程实现:

(1)对存放在DX和AX中的双字长数求补,并在debug下查看结果

(2)用减法指令求0-X,并在debug下查看结果

DATA SEGMENT 
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START:
MOV AX,DATA
MOV DS,AX
MOV AX,1002H
MOV DX,1004H
MOV CX,AX
MOV BX,DX
MOV AX,0
CWD
SUB AX,CX
SBB DX,BX
MOV AH,4CH
INT 21H
CODE ENDS
END START

解答:

(1)

NOT AX

NOT DX

ADD AX,1

ADD DX,0

(2)

实验总结:

本次试验主要是对上课内容的总结与模仿,比如第一题,课本上有一道相近题目,不一样的店在于,本题要求将最后的结果存至内存中,即最后要将寄存器中的值转移到内存中,我采取的方法是将其送回至存储在内存中的变量,其次在回答第二问的各个标志位时,也加深了我对于标志位的认识,再次熟悉了数据段中内容。

第二个实验,用到了求补也就是取相反数,根据课上老师的提示,我采取了not的用法,根据查询资料,我知道neg其实也是可以等效适用的,

NEG DX

NEG AX

SBB DX, 0

以及求补在最终结果上与0-x实际为等效。

根据这两次试验的综合感觉,对汇编的印象就是觉得这门语言非常繁琐和松散,里面有很多小的知识点,而且有很多规定,必须要严格遵守规则才能编写出正确的程序。

  • 40
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值