问题描述
.data
temp_read dw ?
backup_ax dw ?
backup_bx dw ?
backup_dx dw ?
.code
SCAN_MULTIPLE_DIGITS:
call BACKUP_REG
mov temp_read, 0
READCHAR:
mov ax, temp_read
mov bx, 10
mov dx, 0
mul bx
mov temp_read, ax
mov ax, 0
mov ah, 01h
int 21h
cmp al, 13
je ENDREADCHAR
sub al, '0'
mov bx, 0
mov bl, al
add temp_read, bx
jmp READCHAR
ENDREADCHAR:
mov ax, temp_read
mov bx, 10
div bx
mov bx, backup_bx
mov dx, backup_dx
ret
; Printing multiple digits
; Input: dx
; Output: none
; Example:
; mov dx, 322
; call PRINT_MULTIPLE_DIGITS
; **Max printing value --> 65535 (size of dx = 16 bits / 2 bytes )
SHOW_MULTIPLE_DIGITS:
call BACKUP_REG
mov ax, "$"
push ax
mov ax, dx
mov bx, 10
mov dx, 0
EXTRACTCHAR:
div bx
add dx, '0'
push dx
mov dx, 0
cmp ax, 0
je FINISH
jmp EXTRACTCHAR
FINISH:
PRINT:
pop dx
cmp dx, "$"
je ENDPRINT
mov ah,02h
int 21h
jmp PRINT
ENDPRINT:
call RESTORE_REG
ret
BACKUP_REG:
mov backup_ax, ax
mov backup_bx, bx
mov backup_dx, dx
ret
RESTORE_REG:
mov ax, backup_ax
mov bx, backup_bx
mov dx, backup_dx
ret
标签: assemblyx86-16