注册 登录
编程论坛 汇编论坛

汇编初学者 希望大神带

Darwin890 发布于 2018-04-17 10:40, 3560 次点击
16进制怎么存3字的数啊
话说我不太懂2字和3字的长度到底是多少
只有本站会员才能查看附件,请 登录

求大神帮我看一下实验内容的 1  2
9 回复
#2
wmf20142018-04-17 11:00
可以放到内存中,也可以放到其他寄存器中。
#3
xzjxu2018-04-17 12:57
3字就是个字节,2字就是个字节
#4
wmf20142018-04-17 14:09
回复 3楼 xzjxu
字是指word类型,16位,2个字节。
#5
Valenciax2018-04-18 22:06
字节=byte 8bit , 如 12h, 23h
字=2字节 = word 16 bit , 如1234h, 0ABCDh
长度2字就是2个words, 如 12345678h
长度3字就是3个words, 如 12345678ABCDh

2长度2个字加,如  12345678H + AABBCCDDH
长度3字加,长度2字如  12345678AABBH + AABBCCDDH
#6
Darwin8902018-04-18 22:19
谢谢各位啦
#7
Darwin8902018-04-18 22:22
回复 5楼 Valenciax
如果  3字的长度相加的话 最高的四位存到寄存器里相加吗?那最后怎么拿出来把结果写成3字的哇

#8
Valenciax2018-04-19 07:19
回复 7楼 Darwin890
不同长度相加,长度较少的补足成相同相长,例如
长度3字加,长度2字  12345678AABBH + AABBCCDDH
可以补足为  12345678AABBH + 0000AABBCCDDH
因为3字相加,其结果有可能是4字,所以要定义4字空间放结果
小学加法:
 
AABB + CCDD = xxxx + 进位(若有)                    结果放 0000 0000 0000 xxxx
5678 + AABB + 前一加法的进位 = yyyy + 进位(若有)   结果放 0000 0000 yyyy xxxx
1234 + 0000 + 前一加法的进位 = zzzz + 进位(若有)   结果放 0000 zzzz yyyy xxxx
0000 + 0000 + 前一加法的进位 = ? (若有进位则为1)   结果放 000? zzzz yyyy xxxx
#9
Darwin8902018-04-19 23:30
回复 8楼 Valenciax
奥奥! 那具体怎么定义一个4字的空间啊  用dd吗  能不能写下具体的汇编语句哇  
#10
Valenciax2018-04-21 06:59
回复 9楼 Darwin890

假设 3字加2字  12345678AABBH + AABBCCDDH


资料段定义

 first dw 0AABBh,5678h,1234h,0000h ;补足4字长度
 second dw 0CCDDH,0AABBh,0000h,0000h ;补足4字长度
 result dw 4 dup (0)


程式段,关键代码片段

...
...

 mov bx,0
 mov cx,4 ;4字
 clc ;清除进位
redo:
 mov ax,first[bx]
 adc ax,second[bx]  ;加前次进位(若有),并得出下次进位(若有)
 mov result[bx],ax
 inc bx
 inc bx ;指向下一地址,不能用add bx,2, inc不会影响标志,add会
 loop redo ;回圈

...
...
完成后result即为答案

只有本站会员才能查看附件,请 登录


图中
红色是编译后的关键代码
黄色是第1组数字,已补足为4字
蓝色是第2组数字,已补足为4字
绿色是完成后的结果,也就是
12345678AABBH + AABBCCDDH 的和 = 1235 0134 7798

在内存是倒着看 98 77 34 01 35 12 00 00
1