Чтение и печать 32-битных целых чисел в сборке

Привет! У меня есть проблема, и я надеюсь, что кто-то может мне помочь:) Мне нужно 2 макроса: один для чтения, а другой для печати 32-битного целого числа. У меня есть проект на понедельник, и у меня нет идей:(Это то, что я иметь до сих пор:

Macro for reading:

reads macro x
local r, final 
push eax
push ebx
push edx
xor eax,eax
mov ebx, 10
r:
    mov ah,1h
    int 21h
    cmp al,0dh
je final
    sub al,48
    xor ah,ah
    mov edx,eax
    mov eax, x
    mul ebx
    add eax, edx
    mov x,eax
jmp r

final:
pop edx
pop ebx
pop eax
endm


Macro for printing: 


prints macro number
local decompose, printloop
push ax
push bx
push cx
push eax
push edx
mov bl, 10      ; need to divide by 10 to get the last digit
mov eax, number

mov cx,0
decompose:
    mov ah,0
    inc cx
    div bl          ; reminder stored in ah, quotient in al
    mov number,eax
    add edx,48      ; to convert to char
    push edx
    cmp number,0        ;the nr=0 means that the loop ends
    jnz decompose

printloop:  ;loops for as many times as counted before, in cx
    pop edx 
    mov ah,2h       ; prints whatever is in dl
    int 21h
loop printloop

    mov dl,' '      ; the space after a number
    mov ah,2h
    int 21h
pop edx
pop eax 
pop cx
pop bx
pop ax
endm prints

1 ответ

Это макросы

Для чтения:

reads macro x,aux
local r, final
push eax
push ebx
push edx


mov ebx, 10
r:
    mov ah,1h
    int 21h
    cmp al,0dh
je final
cmp al,30h
jb r
cmp al,39h
ja r
    sub al,48
    xor ah,ah
    mov aux,eax
    mov eax, x
    mul ebx
    add eax,aux
    mov x,eax
jmp r

final:
pop edx
pop ebx
endm

Для печати:

print macro number
local println, loopr

    push eax
    push edx
    push ebx
    push si
    mov cx,0
    mov eax,number
    mov ebx, 10
 loopr:  
    xor edx, edx
    div ebx         ; eax <- eax/10, edx <- eax % 10
    add dl, '0'     ; edx to ASCII
    push dx
    inc cx
    cmp eax, 0
    jnz loopr

    println:
    pop dx
    mov ah, 2h
    int 21h
    dec cx
    jnz println

    mov dl, 13d     ;Carriage Return
    mov ah, 2h
    int 21h
    mov dl, 10d     ;Line Feed
    mov ah, 2h
    int 21h

    pop si
    pop edx
    pop eax
   endm print
Другие вопросы по тегам