首页 > 解决方案 > 谁能解释这段代码如何用汇编语言向我们输入和输出多个值?

问题描述

.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

解决方案


推荐阅读