最近两天一直在想可不可以用汇编做15位加法,带输入和输出的那种,经过调试,大致的思路如下。
有一个输入函数input,它接受从键盘输入的字符,并转换为数字存入内存;有一个输出函数output,它将已经转换过的结果输出;有一个加法函数plus,它实现的功能是把输入的两个数相加,并处理为ASCII码字符。
input、output以及main函数都相对简单,我认为难点主要是在plus函数这一块。
我刚开始想用两个指针分别指向两个数据,然后通过移动指针将数据相加,后来我发现这个方法有点麻烦(主要是不确定两个数据的长度是否一样,然后是否有进位);后来想到了另外一种方法,浮点数相加需要对阶,这里的加法也可以将短的数向右移(是整个数据右移,不是指移位操作),然后前面用0来补位,然后就方便处理了。
具体的代码如下:
extrn input:far,output:far,plus:far
public num1,num2,result
data segment
num1 db 16 dup(0) ; 存放已经经过转化的十进制数据
num2 db 16 dup(0)
result db 17 dup(0ffh),'$'
onceMore db 10,'Do you want to add your numbers once more(y/n): $'
data ends
code segment
assume cs:code,ds:data
start:
mov ax,data
mov ds,ax
;--------------------------------------------------------------------
mainProces