2012-05-05 1 views
0

Я все еще получаю голову за сборку x86, поэтому я сделал эту небольшую программу, которая умножает 6 и 7, перемещает данные в EAX, а затем печатает результат. Он компилируется отлично и работает нормально, но вместо печати 42 он печатает символ ASCII сорок второй секунды. У меня на этом форуме, как печатать односимвольный номер, но теперь мне нужно выяснить, как печатать многозначные числа. Вот мой код:x86 assembly (masm32) - как разбить многозначные данные на отдельные символы

.386 
.model flat, stdcall 
option casemap :none 
include \masm32\include\windows.inc 
include \masm32\include\kernel32.inc 
include \masm32\include\masm32.inc 
includelib \masm32\lib\kernel32.lib 
includelib \masm32\lib\masm32.lib 
.data 
    adrs dd 0 
.code 
start: 
    mov eax, 6 
    mov ebx, 7 
    imul eax, ebx 
    add eax, 48 
    mov adrs, eax 
    invoke StdOut, addr adrs 
    invoke ExitProcess, 0 
end start 

Таким образом, в общем, мне нужно понять, как разбить данные на отдельные символы, так что я могу напечатать их. Любая помощь будет большой.

С уважением,

Progrmr

+0

[Этот вопрос] (http://stackoverflow.com/q/10371353/968261) должен помочь. –

+0

Я не могу понять, что сообщение (код не имеет смысла. Я абсолютный новичок). – Progrmr

+0

Разделите свой номер на 10 раз. Соберите остатки. Добавьте к ним ASCII-код '0', распечатайте. –

ответ

2

Разделите число на 10 раз. Соберите остатки. Добавьте к ним ASCII-код '0', распечатайте.

0

Вот фрагмент кода, который принимает число (var sum) и находит, сколько сотен, десятков и единиц в этой сумме делит сумму на 100, 10, а остаток - единицы. Он сохраняет все эти значения в ARRAY после добавления к нему 30H. Теперь ARRAY является эквивалентом ASCII числа в сумме.

: 
ARRAY Db 4 dup(?),0 
sum DW 253D 
: 
    mov esi, offset ARRAY 
    mov ax, word ptr sum2 
    mov bl,100D 
    div bl  ; ah - R and al - Q  
    mov bh, ah  
    add al,30h 
    mov [esi], al 
    add esi,1 

    mov ah,00 
    mov al,bh 
    mov bl,10D 
    div bl 
    mov bh, ah 
    add al,30h 
    mov [esi], al 
    add esi,1 

    mov dl,bh 
    add dl,30h 
    mov [esi],dl 

    lea dx,offset RESULT2 
    mov ah,09 
    int 21h 
    mov esi, offset ARRAY 
    mov cl,04 
loopdisplay1: 
    mov dl,[esi] 
    mov dh,00 
    mov ah,02 
    int 21h 
    add esi,1 
    dec cl 
    jnz loopdisplay1