2016-09-11 7 views
-4

8ビットレジスタALを使用して整数の合計を見つける方法とむしろ混同しますか?どんなヒントも素晴らしいだろう。ありがとうございました。MOVZXを使用してアセンブリでレジスタ8-bitALを使用して整数20,30,50および160を追加

TITLE Add    (AddSub.asm) 

; This program adds and subtracts 32-bit integers. 
;Problem 1 Add 20, 30, 50,160 al hint move ax,0 to start 
; Last update: 2/1/02 

TITLE Add    (AddSub.asm) 

INCLUDE Irvine32.inc 

.code 
main PROC 

    mov al,20d  
    add al,30d  
    add al,50d  
    add al,160d 
    call DumpRegs 

    call writedec 
    exit 
main ENDP 
END main 
+1

ヒント:260> 256です。これはできません。 –

+0

私は知っていますが、私はMOVZXを使ってそうする方法があると言われましたか?ありがとうございました。 –

+2

あなたはALを使用していないのであれば260を得ることができますが、AXです。最悪の場合、AH:AL(同じレジスタが異なって表示されます)。 8ビットで計算した後、ゼロ拡張することは動作しません。 –

答えて

2

あなたはALに番号を追加し、オーバーフローがある場合、どのようなあなたが得ることALにおける結果の下位8ビットであり、そしてキャリーフラグがセットされています。キャリーフラグとALレジスタを9ビットの数量で表示すると、それはあなたが探している合計です。

命令「ADC」は「Add with Carry」の略語なので、既にAHがゼロに設定されている場合(おそらくMOVZXとなります)、あなたはADC AH,0することができます。これは基本的にキャリーフラグをAHに追加し、AXに結果が含まれます。

ここでは、それはヒント以上のものです。実際には解決策です。

+0

私は謝るが、コードは次のようになります: TITLE(AddSub.asm)を追加 はIrvine32.inc .CODE メインPROC \tをINCLUDE MOVら、20dは\t \t \tは、30D \tをアルを追加します\t \tらを追加、50D \t \t \tのADCら、160D \t \t mov al、0FFh \t al、1 \t \t; CF = 1、AL = 00 \t \tコールDumpRegs \tコール\t writedec終了 メインENDP ENDメイン 私はアセンブリに新しい、非常にnoobish思いますすべてのあなたの助け –

+0

のためにどうもありがとうございます。私を許してください。ありがとうございます。 –

+1

うん、いいえ。 'mov al、0FFh add al、1'は意味がありません。追加する前に 'ah'が既にゼロだったならば、必要なのは' adc ah、0'だけです。私の答えをもう一度読んでください。 –

1

axは、ahおよびalから構成される。

movzxは、「ゼロ拡張」のあるmovです。これを使用して、短い値を大きな宛先にコピーできます。

movzx ah,0は有効ではありませんが、8bの定数を8bレジスタに移動します。何も拡張しません(mov ah,0で十分です)。

movzx ax,BYTE 20は、8ビット定数20を0に拡張し、16ビットaxレジスタに格納します。

これはmov al,20 mov ah,0mov ax,WORD 20と等価である(ahalとゼロにバイト値20をロードする方法や、数千の他の変異体は、一般的なものの一つはxor ah,ahを使用することです)。

あなたはaxが初期化され、全体を持っていたら、16bのバリアントadd ax,#iadd al,#iを変更、または(結果はオーバーフロー部8bをした際に、セットのCF =キャリーフラグ)add al,#iよう指示を追加8bは2からその同じものを構成することができますいずれかadc ah,0(追加しますCFからああ)。

マイクの答えにこれを適用してください。あなたがまだ迷っている場合は、良い本/チュートリアル/講義を入手してください。

どうすればいいですか?のように聞くことができます。「AXとEAXだけが可能なのですか?」?これは、あなたがx86アセンブラについて何も読んでいない(または理解していない)ことを意味します。しかし、すでにコードを書こうとしていますか?最初にいくつかの講義を掘り下げ、いくつかの良い本や講義ノートを何度か読み直すのに数週間しかかからず、すべてがやや意味をなさないでしょう。現時点では、あなたが授業中に持っているものを通らずにあなたに答えるのは難しいです。

関連する問題