我需要编译器中第一个程序的帮助。 我必须将用户输入的值从十进制转换为二进制。 我不知道如何显示值作为小数,然后我应该做什么。 任何人都可以指导我一步一步做下一步。将汇编器中的十进制转换为二进制文件
.model small
.stack 100h`
.data
txt1 db "Enter binary value:" ,10,13, "$"
txt2 db "BIN: " ,10,13, "$"
.code
main proc
mov ax, @data
mov ds, ax
;clear screen
mov ah,0fh
int 10h
mov ah,0
int 10h
;show first text
mov ah, 9
mov dx, offset txt1
int 21h
call Number
main endp
Number proc
mov cx,5
xor bx,bx
read:
mov ah,0
int 16h
cmp al,'0'
jb read
cmp al, '9'
ja read
mov ah,0eh
int 10h
loop read
Number endp
mov ax, 4c00h
int 21h
end main
'xor eax,eax'设置CF = 0。在'shl'之前这样做。 (并且使用'setc al'代替'adc'来提高效率)。 [另外,'LOOP'指令很慢,不要使用它。](https://stackoverflow.com/questions/35742570/why-is-the-loop-instruction-slow-couldnt-intel-have-implemented除非针对代码大小超速进行优化。另外,你在循环中有'mov ebx,eax'。在发布之前测试你的asm可能会更好。 – 2017-11-21 10:57:06
另外,您不会描述您正在使用的调用约定。您似乎使用Irvine32惯例,其中第一个参数在'eax'中,而返回值也是如此。这完全没有标准或广泛使用。 (另外,这是一个16位DOS问题,虽然算法是相同的。) – 2017-11-21 11:01:16
顺便说一句,欢迎来到Stack Overflow。如果/当您调试此代码时,我很乐意反转我的失败。它很好,很紧凑,并有评论描述它在做什么,除了这些错误之外,它是一个体面的答案。通过在您的评论中添加@peter来通知我。 – 2017-11-21 11:27:20