2011-08-17 12 views
1

ASMを学ぼうとしていて、いくつかのチュートリアルを終えたばかりでなく、MASM .ifと.whileの代わりにjmpとcmpなどを使用するチュートリアルのコンテンツを修正しましたマクロ。MASMを使ってコンソールにレジスタを出力する

私はもっと先進的なチュートリアルを続ける前に、非常に簡単に何かを書いてみることにしました。私はフィボナッチ数生成器を書いています。

.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 

.code 
start: 

    mov eax, 1 
    mov ecx, 1 

    _a: 

    push eax 
    add eax, ecx 
    pop ecx 

    ; Jump to _b if there is an overflow on eax 

    ; Print Values Here 

    jmp _a 

    _b: 

    push 0 
    call ExitProcess 

end start 

私はEAX/ECXのオーバーフローをチェックしていきますが、今、私は、画面上EAX/ECXの値を表示するのにちょうど興味:ここで私はこれまで持っているソースです。

私は一定の文字列のアドレスを.dataからプッシュし、hello worldチュートリアルの最初の例であるStdOutを呼び出す方法を知っていますが、これは全く異なるようです(?)。

答えて

3

は、Microsoftによって提供されるこのコード自体、このコードは、16ビットシステムでAXレジスタを出力する

http://support.microsoft.com/kb/85068

注あります。しかし、あなたは考えを得ることができます、あなたはちょうど各文字をループすることによって、AXの値をASCII文字に変換する必要があります。割り込み部分をスキップし、StdOut関数を使用します。

mov dx, 4   ; Loop will print out 4 hex characters. 
nexthex: 
      push dx   ; Save the loop counter. 
      mov cl, 4   ; Rotate register 4 bits. 
      rol ax, cl 
      push ax   ; Save current value in AX. 

      and al, 0Fh  ; Mask off all but 4 lowest bits. 
      cmp al, 10   ; Check to see if digit is 0-9. 
      jl decimal   ; Digit is 0-9. 
      add al, 7   ; Add 7 for Digits A-F. 
decimal: 
      add al, 30h  ; Add 30h to get ASCII character. 

      mov dl, al 
      ;Use StdOut to print value of dl 
      ;mov ah, 02h  ; Prepare for interrupt. 
      ;int 21h   ; Do MS-DOS call to print out value. 

      pop ax    ; Restore value to AX. 
      pop dx    ; Restore the loop counter. 
      dec dx    ; Decrement loop counter. 
      jnz nexthex  ; Loop back if there is another character 
          ; to print. 

同様にここを参照してください:

http://www.masm32.com/board/index.php?PHPSESSID=fa4590ba57dbaad4bc44088172af0b49&action=printpage;topic=14410.0

+0

だから、あなたは最高に最下位桁から印刷していますか? –

関連する問題