ASCII减法

1az98你好 2011-06-12 11:14:54
初学,写的ASCII减法有问题,求指导。谢了先
代码:
TITLE Add and Suntract
INCLUDE Irvine32.inc

.data
var_1 BYTE "900402076502015";//被减数
var_2 BYTE "100123456789765";//减数
result BYTE SIZEOF var_1 DUP(0),0;//结果字符串
.code
main PROC
mov ax,0
mov bh,0;//保存进位
mov esi,SIZEOF var_1 - 1
mov ecx,LENGTHOF var_1
L:
mov ah,0
mov al,[var_1 + esi]
sub al,bh
aas
cmp ah,0ffh
jne L1
mov bh,1
L1: or al,30h
sub al,[var_2 + esi]
aas
cmp ah,0ffh
jne L2
mov bh,1
L2: or al,30h
or bh,30h
mov [result+esi],al
dec esi
loop L
mov edx,OFFSET result
call WriteString
call Crlf
exit

main ENDP
END main
运行结果为:799278519712250
正确结果为:800278619712250
...全文
134 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
1az98你好 2011-06-14
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 kyotrue 的回复:]

ASCII不是BCD
BCD是4bit表示一个数,限制每4bit的取值范围是0~9,用来表示10进制数
ASCII是7bit表示一个字符(扩展ASCII 8bit)
[/Quote]
非压缩的BC码是用8位表示一个数(高4位全为0),压缩的BCD码是用4位表示一个数。不和我的理解对不?
kyotrue 2011-06-13
  • 打赏
  • 举报
回复
aas用来干嘛的?ASCII不是BCD。

ASCII的0是30H,不是0H
kyotrue 2011-06-13
  • 打赏
  • 举报
回复
ASCII不是BCD
BCD是4bit表示一个数,限制每4bit的取值范围是0~9,用来表示10进制数
ASCII是7bit表示一个字符(扩展ASCII 8bit)
1az98你好 2011-06-13
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 kyotrue 的回复:]
aas用来干嘛的?ASCII不是BCD。

ASCII的0是30H,不是0H
[/Quote]
ASCII是韭压缩的BCD码?
1az98你好 2011-06-13
  • 打赏
  • 举报
回复
贴出正确的代码:
TITLE Add and Suntract
INCLUDE Irvine32.inc

.data
var_1 BYTE "900402076502015";//被减数
var_2 BYTE "100123456789765";//减数
result BYTE SIZEOF var_1 DUP(0),0;//结果字符串
.code
main PROC
mov ax,0
mov bh,30h;//保存进位
mov esi,SIZEOF var_1 - 1
mov ecx,LENGTHOF var_1
mov dh,30h
L:
mov al,[var_1+esi]
sub al,bh
aas
jc L1
mov bh,30h
jmp NEXT_1
L1:
mov bh,31h
NEXT_1:
or al,30h
sub al,[var_2+esi]
aas
jc L2
mov dh,30h
jmp NEXT_2
L2:
mov dh,31h
NEXT_2:
or al,30h
or bh,dh
mov [result+esi],al
dec esi
loop L
mov edx,OFFSET result
call WriteString
call Crlf
exit
main ENDP
END main
附上参考链接:http://scc.qibebt.cas.cn/docs/optimization/VTune(TM)%20User's%20Guide/mergedProjects/analyzer_ec/mergedProjects/reference_olh/instruct32_hh/vc5a.htm

21,459

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧