어셈블러에서 첫 번째 프로그램에 대한 도움이 필요합니다. 사용자가 입력 한 값을 10 진수에서 2 진수로 변환해야합니다. 어떻게 값을 소수점으로 표시 할 수 있는지, 그리고 다음에해야 할 일은 잘 모릅니다. 누구든지 다음 단계에 대해 단계별로 안내 할 수 있습니까?어셈블러에서 10 진수를 2 진수로 변환
.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' 전에 해봐. (효율성을 높이기 위해'adc' 대신'setc al'을 사용하십시오). [또한, LOOP' 명령은 느리므로 사용하지 마십시오.] (https://stackoverflow.com/questions/35742570/why-is-the-loop-instruction-slow-couldnt-intel-have-implemented -it-efficient) 코드 크기를 오버 스피드로 최적화하지 않는 한. 또한 루프 안에'mov ebx, eax'가 있습니다. 게시하기 전에 asm을 테스트하는 것이 더 좋았을 것입니다. –
또한 사용중인 호출 규칙에 대해서는 설명하지 않았습니다. 당신은 첫 번째 arg가'eax'에 들어가는 Irvine32 규칙을 사용하는 것처럼 보입니다. 반환 값 역시 마찬가지입니다. 그것은 전혀 표준 적이거나 널리 사용되지 않습니다. (알고리즘은 동일하지만 16 비트 DOS 질문입니다.) –
BTW, Stack Overflow에 오신 것을 환영합니다. /이 코드를 디버깅 할 경우, 내 downvote 반대로 행복 할 거라고. 멋지면서도 간결하며 그 일을 설명하는 주석이 있으며 버그를 제외하고는 괜찮은 대답입니다. 귀하의 의견에 @peter를 포함하여 알려주십시오. –