Значение регистра выходных данных в NASM

тут новый парень, а у меня уже вопрос.

Я адаптирую пример кода, использованный в книгах по ассемблеру Джеффа Дунтеманна, и хочу вывести на терминал целочисленное значение, хранящееся в регистре данных?

Следующий ниже код делает то, что он выводит строки в порядке, помещает значение в ECX в порядке, но когда доходит до следующего:

                pop ecx
                mov eax,4                          
                mov ebx,1                          
                mov edx, ecx

                int 80h  

Он не отображает содержимое edx на терминале, хотя я думаю, я сказал это с помощью mov eax, 4 и т. д.

Кто-нибудь может дать мне какие-либо «указатели» (каламбур)?

Код для справки (с изменениями от 17.06.2012):

SECTION .data
    submessage: db "I am subtracting 5 from 10!", 10
    msglen: equ $-submessage

    ansmsg: db "Answer is:", 10
    msglen2: equ $-ansmsg
    EOL: db 10

SECTION .bss
    msg: resd 2                                         ; reserve space for 2 dwords

SECTION .text

global _start

_start: nop

;Displays test on shell
                    mov eax,4                           ;print to terminal     
                    mov ebx,1                                      
                    mov ecx, submessage
                    mov edx, msglen
                    int 80h                             ;"I am subtracting 5 from 10!"

                    mov eax,4                           ;print to terminal   
                    mov ebx,1                                            
                    mov ecx, ansmsg
                    mov edx, msglen2
                    int 80h                             ;"Answer is..."

;Subtraction operation below:                  
                            mov edx, 10
                            sub edx, 5
                            mov [msg], edx                ; store 5 in msg


; now we need to print  msg to terminal                            


                            mov eax, 4                  ;print to terminal 
                            mov ebx, 1
                            mov dword [msg+1], 0xa      ;helps prints something out! 

                    ;Encountered problem here= prints out 'Answe' instead of integer '5'

                            push dword 2                ; store size of msg
                            push dword [msg]            ; push to stack contents of msg 
                            int 80h                    

                            add esp, 3                  ;clean stack (2 push calls *4)
                            int 80h

; I like labels :)

sys_exit:                            mov eax,1                   ;exit status
                                    mov ebx,0                        
                                    int 80h  
                                        nop

PS- Если у меня неправильный отступ строки, я хотел бы знать, как я могу его улучшить; ИМХО, обучение сборке становится более привлекательным, как только вы преодолеваете первоначальный «горб» обучения :)

5
задан Halodude 17 June 2012 в 10:18
поделиться