2016-05-05 6 views
1

私はヘキサワードの配列を持っており、それをコンソールに印刷したいと思います。コンソールを登録するにはどうすればいいですか?

.data 
data dw 1234H, 5678H, 9191H 

.code 
mov ax, @data 
mov ds, ax 

mov si, offset data 
mov cx, 4 

again: 
mov ax, [si] ; store the value in ax 
inc si  ; increment the pointer 
inc si 
dec cx 
jnz again 

このループで毎回レジスタaxの値を出力したいとします。

+1

。いったんそれを持っていれば、印字可能な文字を得るためにascii "0"を追加することになります。それらを一度に吐き出すか、完全な文字列のためにキャッシュすることができます。 –

+0

[MASM32](http://www.masm32.com/)または[Irvine32](http://kipirvine.com/asm/examples/index.htm)のようなライブラリを使用してみてください。 16ビットの場合、確かに他のライブラリがあります。 – zx485

+0

「関連する」セクション(右の方)で[**アセンブリのアセンブリレジスタを作成する**](http://stackoverflow.com/questions/22621780/print-register-in-assembly-x86?rq=1) )または[**どのようにしてx86アセンブリ内のレジスタの内容をコンソールに出力できますか?私はLinuxを実行しています**](http://stackoverflow.com/questions/5697561/how-do-i-print-the-contents-of-a-register-in-x86-assembly-to-the-console -im-ru?rq = 1)は役に立ちますか? –

答えて

0

これはそれを行うための一つの方法(EMU8086でテスト)である:あなたが数を形成するのに必要な最小限のビットを隔離することができるレジスタの下位バイトにマスクと右シフトのシリーズを使用して

.model small 
.stack 100h 
.data 
array dw 1234H, 5678H, 9191H, 7A40H 
one_char db 'x'    ;USED TO STORE ONE HEX VALUE. 
two_char db 'xx',13,10,'$' ;TWO HEX VALUES TO DISPLAY. 

.code 
mov ax, @data 
mov ds, ax 

mov si, offset array 
mov cx, 4 

again: 
mov ax, [si] ; store the value in ax 
;AX = AH AL. 
    ;DISPLAY AH. 
    push ax   ;PRESERVE CURRENT HEX NUMBER. 
    mov one_char, ah ;TWO HEX VALUES OF THE FIRST BYTE. 
    call separate_two_digits ;SEPARATE THE TWO HEX. 
    ;DISPLAY THE TWO DIGITS. 
     mov dx, offset two_char 
     mov ah, 9 
     int 21h 
    ;DISPLAY AL. 
    pop ax   ;RESTORE AX. 
    mov one_char, al ;TWO HEX VALUES OF THE SECOND BYTE. 
    call separate_two_digits ;SEPARATE THE TWO HEX. 
    ;DISPLAY THE TWO DIGITS. 
     mov dx, offset two_char 
     mov ah, 9 
     int 21h 
inc si  ; increment the pointer 
inc si 
dec cx 
jnz again 

;WAIT FOR KEYPRESS. 
mov ah, 0 
int 16h 

mov ax, 4c00h 
int 21h 

;--------------------------------------------------             
;ONE_CHAR CONTAINS TWO HEX VALUES: FIRST HEX IN THE 
;4 UPPER BITS, THE SECOND HEX IN THE LOWER 4 BITS. 

separate_two_digits proc 
    mov di, offset two_char 
;4 UPPER BITS OF THE CHAR. 
    mov al, one_char 
    shr al, 4 
    call convert2char 
    mov [ di ], al 
;4 LOWER BITS OF THE CHAR. 
    mov al, one_char 
    and al, 00001111b 
    call convert2char 
    inc di 
    mov [ di ], al 

    ret 
separate_two_digits endp  


;--------------------------------------------------             
;CONVERT FROM HEX TO ASCII CHARACTER. 

convert2char proc 
    cmp al, 9 
    jbe digit  ;IF AL <= 9 : IT'S A DIGIT. 
;UPPERCASE LETTER. 
    add al, 55  ;HEX LETTER TO ASCII. 
    jmp finale 
digit: 
    add al, 48  ;HEX DIGIT TO ASCII. 

finale:   
    ret 
convert2char endp  
+1

char *を含んでいないので、あなたの* one_char *変数を非常に混乱させます。 * one_byte *と呼ばれるほうがいいでしょう。 –

関連する問題