我需要編譯器中第一個程序的幫助。 我必須將用戶輸入的值從十進制轉換爲二進制。 我不知道如何顯示值作爲小數,然後我應該做什麼。 任何人都可以指導我一步一步做下一步。將彙編器中的十進制轉換爲二進制文件
.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