2017-12-21 17 views
0

私の場合0AhのAlレジスタに値を表示したいのですが、ここに私のコードがありますが、nothigが起きますが、私は確信していませんが、私の問題は私がhexa numberあなたが忘れてしまったすべての値をAlレジスタに表示

; You may customize this and other start-up templates; 
; The location of this template is c:\emu8086\inc\0_com_template.txt 

org 100h 


.data segment 

Array DB 0h,0h,0h,0h,0h 
x db 0h 
result db ? 

.code segment 

mov si,0 

loop1: 
     ;these 5 lines allows me to take 
     ;input and let it be shown on the screen 

     mov ah,08h 
     int 21h 
     mov ah,02h 
     mov dl,al 
     int 21h 

     ;those 3 lines allows me 
     ;to start my code when 
     ;enter button is pressed 

     mov bl,0Dh 
     cmp bl,dl 
     JZ start 

     ;those 4 lines allow me 
     ;to enter 4 chars and 
     ;fill an array with them 
     ;to use them later 

     mov array[si],dl 
     inc si 
     cmp si,5 
     jne loop1 


start: 

     ;putting each element in the 
     ;array in a register to be 
     ;able to deal with it 

     mov si,0 
     mov al,array[si] 
     mov bl,array[si+1] 
     mov cl,array[si+2] 
     mov dl,array[si+3] 

     ;subtracting 30h from each 
     ;number to turn it to its 
     ;decimal form to deal with 
     ;it as normal number 

     sub al,30h 
     sub bl,30h 
     sub cl,30h 
     sub dl,30h 

     ;adding all numbers in 
     ;variable called result 

     add al,cl 
     add al,bl 
     add al,dl 

     ;printing 

     mov ah,02h 
     mov dl,al 
     int 21h 
     ret 
+0

イメージのコードをテキストとして送信してください。ありがとうございます。 – sam

+0

done、thanks @sam –

+0

コードに根本的な問題があるようです... COMまたはEXEモデルですか?それがCOMであれば、最初に '.data'をつけることはできません。コードとして実行されます(最初の命令は' org 100h'の後になければなりません。それがEXEならば、あなたは 'org 100h'を持つことができません。' mov array [si]、dl'のように使用する前に 'ds'を設定する必要があります...それらを無視して何を再読み込みしようとしますあなたの実際の問題ですが、いくつかのチュートリアルを試して、すべてを再読み込みして、正しい例を数回試してみてください。 – Ped7g

答えて

0

まず:しかしレジスタに私はそうここ

の文字列にヘキサ番号を変換する方法は、私が使用したコードがありますあるチャーや文字列を印刷することができますあなたの計算に配列の最後の要素を含める。

コードあなたの計算では、配列の最後の要素を含める:

あなたはレジスタに要素を入れている次の行を追加します。

mov bh, array[si+4] ; store the last element in BH register 

あなたはのコンテンツを変換されている場合、この行を追加します。小数点以下に登録してください:

sub bh, 30h    ; convert it to decimal 

すべてのレジスタの内容を追加:小数に合計を印刷する

add al, bh    ; add contents of AL with contents of BL 

コード:

mov ah, 0  ; clear AH because DIV instruction takes AX for division 
    mov cl, 10 ; store the divisor in CL 
    div cl  ; AX/CL remainder will be in AH & quotient in AL 

    mov bx, ax ; move AX value to BX because later instruction are going to overwrite value of AH 

    mov ah,02h  ; print quoteint 
    mov dl,bl  
    add dl,30h  
    int 21h 

    mov ah,02h  ; print remainder 
    mov dl,bh 
    add dl,30h 
    int 21h 

をお使いの場合には、すべての5元素の添加後の最大数は2桁の数字になりますので、 (9 + 9 + 9 + 9 + 9 = 45)を除算する必要があります。最初に商を印刷し、次に余りを出力します。合計に2桁以上の数字(123など)が含まれている場合は、同じプロセスを連続して繰り返し、剰余がゼロになるまで残りの部分をスタックに格納する必要があります。次に、必要なASCII変換を行った後に、スタックの数字をポップアップして&に表示することができます。

関連する問題