我是靠谱客的博主 奋斗书包,这篇文章主要介绍汇编实验一——字符串操作/求X+Y和,现在分享给大家,希望可以做个参考。

实验要求

(1)将字符串TABLE(10) “0123456789” 传送到另一个内存 BUF(10)
(2)将TABLE单元的10个字节数据传送到TABLE+5开始的单元
(3)计算X+Y,结果存Z单元
(4)计算(X+Y)/X,商存Z单元,余数存Z+2单元

实验代码及解释

代码编译、链接、调式
途中遇到的填写提示,全部回车默认即可。

复制代码
1
2
3
4
masm test1.asm link test1.obj debug test1.exe

(1)将字符串TABLE(10) “0123456789” 传送到另一个内存 BUF(10)
CLD——将标志寄存器Flag的方向标志位DF清零。在字串操作中使变址寄存器SI或DI的地址指针自动增加,字串处理由前往后。
REP MOVSB——搬移字串。

(2)将TABLE单元的10个字节数据传送到TABLE+5开始的单元
这个要考虑覆盖的问题,从前面开始就会导致覆盖,而需要从后面覆盖
STD——将方向标志位DF置1,在字串操作中使SI或DI的地址指针自动递减,字串处理由后往前。

(3)计算X+Y,结果存Z单元
注意进位。

复制代码
1
2
3
4
结果在:001A(26D) 1 DW == 2 DB 10+10+1+1+2+2=26=1A

(4)计算(X+Y)/X,商存Z单元,余数存Z+2单元
注意进位。

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
ASSUME DS:seg1,CS:seg2 seg1 SEGMENT TABLE DB 30H,31H,32H,33H,34H,35H,36H,37H,38H,39H BUF DB 10 DUP(0) NUMBER DB 7 ASCII DB 0 X DW 1000H Y DW 0FFFFH Z DW 0,0 seg1 ENDS seg2 SEGMENT start: MOV AX,seg1 MOV DS,AX MOV ES,AX ;(1)查表 LEA BX,TABLE MOV AL,NUMBER XLAT MOV ASCII, AL ;(2)字串传送 MOV CX,10 LEA SI,TABLE LEA DI,BUF CLD REP MOVSB ;3)计算(X+Y),结果存Z单元 MOV DX,0 MOV AX,X ADD AX,Y ADC DX,0 MOV Z,AX MOV Z+2,DX ;4)完成任务二 ;改写程序,将TABLE单元的10个字节数据传送到TABLE+5开始的单元 MOV CX,10 LEA SI,[TABLE + 9] LEA DI,[TABLE + 14] STD REP MOVSB ;添加代码,完成(X+Y)/X,商存Z单元,余数存Z+2单元 MOV DX,0 MOV AX,X ADD AX,Y ADC DX,0 DIV X MOV Z,AX MOV Z+2,DX seg2 ENDS END start

图片结果

展示(2)和(4)的结果
X = 1000H
Y = 0FFFFH
X+Y = 10FFFH
(X+Y)/Z = 0010、0FFF
在这里插入图片描述

最后

以上就是奋斗书包最近收集整理的关于汇编实验一——字符串操作/求X+Y和的全部内容,更多相关汇编实验一——字符串操作/求X+Y和内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(63)

评论列表共有 0 条评论

立即
投稿
返回
顶部