【发布时间】:2017-05-29 11:57:02
【问题描述】:
我使用我在 Internet 上找到的一些指令编写了这段代码,用于转换一些由汇编程序计算出来的数字,然后存储在寄存器或存储器中。那么我无法弄清楚如何打印包含转换后的数字的 SI。我想我需要找到一种方法回到 SI,并首先保存数据。有没有人有任何想法?
;CONVERTING DIGITS
MOV AX, HORIZONTAL
MOV BX, 10 ;DIGITS ARE EXTRACTED DIVIDING BY 10.
MOV CX, 0 ;COUNTER FOR EXTRACTED DIGITS.
CYCLE1:
MOV DX, 0 ;REMAINDER OF DIV WILL BE STORED HERE
DIV BX ;DX:AX / 10 = AX:QUOTIENT DX:REMAINDER.
PUSH DX ;PRESERVE DIGIT EXTRACTED FOR LATER.
INC CX ;INCREASE COUNTER FOR EVERY DIGIT EXTRACTED.
CMP AX,0 ;TO SEE IF NUMBER IS
JNE CYCLE1 ;NOT ZERO, LOOP BACK.
;NOW RETRIEVING PUSHED DIGITS.
MOV SI, OFFSET HORIZONTAL
MOV TMP1, CX
CYCLE2:
POP DX
ADD DL, 48 ;CONVERT DIGIT TO CHARACTER.
MOV [SI], DL
INC SI
LOOP CYCLE2
MOV AH,9 ; print string
MOV DX, OFFSET SI
INT 21h
【问题讨论】:
-
我不知道
mov dx, offset si是如何编译的,什么时候应该是mov dx, offset HORIZONTAL。此外,您可能需要在调用打印服务之前使用 '$' 终止字符串 --mov byte ptr [si], 36 -
看起来您正在使用
HORIZONTAL来表示数值(从mov ax,[HORIZONTAL]中扣除的 16 位“字”)和输出字符串(在最坏的情况下可能是 6 字节长,例如值 10000..65535),那么您是否在那里分配了足够的空间,或者您不介意覆盖内存中的以下字节? -
你的问题还有一个答案,看看吧!