키보드에서 0에서 9999 사이의 숫자를 입력하고 어셈블리 언어 프로그래밍을 사용하여 10진수를 2진수로 변환하고 변환 결과를 2진수 형식으로 표시합니다.
데이터 세그먼트
msg0 db '0~9999 사이의 숫자를 입력하세요:$'
msg1 db '결과는:$'
result dw 0 ;변환된 이진수를 저장
disp db 16 dup(20h),'$' ;최대 데이터가 9999이므로 최대 16개의 이진수를 표현할 수 있다
p>데이터 끝
코드 세그먼트
는 ds:data,cs:code라고 가정합니다.
시작:
mov ax, data
mov ds,ax
lea dx,msg0 ;입력 정보에 대한 프롬프트 표시
mov ah,09h
int 21h
p>lea si,result
call input; 입력 결과를 변환하여 결과 단위로 보냅니다.
lea dx,msg1;
mov ah,09h
int 21h
crlf 호출 ; 캐리지 리턴 및 라인 피드
mov bx,result
lea si,disp
호출 출력 ;Result의 숫자를 표시할 ASCII 코드로 변환
mov ah,09h
lea dx, disp ;결과를 디스플레이에 출력
int 21h
mov ax,4c00h
int 21h
input:
mov ah,01h; 키보드 입력 및 echo
int 21h
cmp al,0dh; 입력이 Enter가 아니면 입력을 계속하고, 그렇지 않으면 입력을 종료합니다. >
jz endret p>
mov ah,0
sub al,30h ; 여기에는 오류 판단 기능이 없습니다. 입력은 0부터 9까지의 숫자라고 가정합니다. , 30H를 직접 빼기
push ax ;Protect AX, AH는 이때 0으로 지워져야 합니다
mov ax,[si] ;변환 알고리즘: Result=Result*1 AX
mov bx,10
mul bx
mov [si],ax
팝 액스
추가 [si],ax
jmp 입력
endret:
ret
출력:
mov cx ,16
s0:
mov dl,30h
rol bx,1
adc dl,0
mov [si],dl
inc si
루프 s0
ret
crlf:
mov 아,02h
mov dl,0dh
int 21h
mov dl,0ah
int 21h
ret
코드 끝
끝 시작