我将缓冲区中的每个整数相乘,现在需要连接中间结果。
我有这样的代码:(先前在.数据中我声明:(一个月一个月)
MOV cx, ax
MOV si, offset skBuf
MOV di, offset raBuf
add si,ax
dec si
work:
MOV dl, [si]
sub dl,48
mov bl,dl
mov al,3 ;can be changed by 0-9
mul bl
mov dl,al
add dl,48
divide:
cmp dl,09H ;compares with 9
jbe pabaiga
ja decomposition
decomposition:
mov ax,dx
mov bl, 10
div bl ;al=ax/bl ah=ax%bl
MOV [di], ah
mov dl,al
add dl,count
mov count,al
add count,48
dec si
inc di
LOOP work
我觉得我做错了什么。
基本上你要是听不懂:
例如,我的缓冲区包含:456
现在,没有代码的除法部分,它将每个数字乘以3,因此:
6*3
并打印它- 然后
5*3
并打印它 - 最后是
4*3
并分别打印
我需要输出看起来像456*3
,等于1368
现在就用下面这个代码:
MOV cx, ax
MOV si, offset skBuf
MOV di, offset raBuf
add si,ax
dec si
work:
MOV dl, [si]
sub dl,48
mov bl,dl
mov al,3 ;galima pakeisti
mul bl
mov dl,al
add dl,48
MOV [di], dl
dec si
inc di
LOOP work
输出(有456个输入)是B?<
,但我需要它是1368
如果能让它更容易理解的话,我从一个文件中阅读并将其写入另一个文件。
1条答案
按热度按时间pu82cl6c1#
例如,我的缓冲区包含:456
我需要输出看起来像456*3,等于1368
与当前从源字符串末尾开始的方法不同,将数字组合成一个16位整数以备乘法,最好从数字序列的开头开始:
然后使用Displaying numbers with DOS中的一个代码片段,您可以自由修改它,将其存储到目标缓冲区中。
他们希望我做同样的计算几乎任何大小的数字:/这就是为什么我张贴要求做你提到的确切的事情做手工我猜。你有什么想法如何工作吗?这是我在开始时问的,但可能我的问题是错误的措辞
然后你需要一个一位数乘数的长乘法。这一次最简单的方法是从数字序列的末尾开始,同时从目标缓冲区的末尾存储结果,这应该有空间容纳1个额外的字符!