2つの32ビットの数値を画面に読み込み、保存し、印刷し、結果を掛けて印刷する必要があります。32ビットアーキテクチャ上で2つの10桁の32ビットの数値を掛ける
私は2つの数字の数字を読み、それを印刷することができましたが、十分に大きければ、それらがオーバーフローして、事実は言及せず、それらを掛けなければなりません。 64ビットレジスタ。私は "倍精度の算術"のものを見つけましたが、それを実装することはできませんでした。私はeax:edxレジスタを使用しなければならないことを知っています。キャリービットについても読んでいますが、まだそれの本質を理解することはできません。 (MASM、32ビットシステム)
コード私はこれまで持っている:
INCLUDE Irvine32.inc
.data
NUM1 BYTE ?
NUM2 BYTE ?
NUM3 BYTE ?
NUM4 BYTE ?
NUM5 BYTE ?
NUM6 BYTE ?
NUM7 BYTE ?
NUM8 BYTE ?
NUM9 BYTE ?
NUM10 BYTE ?
NUMA BYTE ?
NUMB BYTE ?
NUMC BYTE ?
NUMD BYTE ?
NUME BYTE ?
NUMF BYTE ?
NUMG BYTE ?
NUMH BYTE ?
NUMI BYTE ?
NUMJ BYTE ?
SZAM1 DWORD 0
SZAM2 DWORD 0
SZAMOL DWORD 0
.code
main proc
elso:
call ReadChar
mov NUM1,al
call WriteChar
cmp AL,13
JE masodik
call ReadChar
mov NUM2,al
call WriteChar
cmp AL,13
JE masodik
call ReadChar
mov NUM3,al
call WriteChar
cmp AL,13
JE masodik
call ReadChar
mov NUM4,al
call WriteChar
cmp AL,13
JE masodik
call ReadChar
mov NUM5,al
call WriteChar
cmp AL,13
JE masodik
call ReadChar
mov NUM6,al
call WriteChar
cmp AL,13
JE masodik
call ReadChar
mov NUM7,al
call WriteChar
cmp AL,13
JE masodik
call ReadChar
mov NUM8,al
call WriteChar
cmp AL,13
JE masodik
call ReadChar
mov NUM9,al
call WriteChar
cmp AL,13
JE masodik
call ReadChar
mov NUM10,al
call WriteChar
cmp AL,13
JE masodik
masodik:
Call Crlf
call ReadChar
mov NUMA,al
call WriteChar
cmp AL,13
JE konvertal
call ReadChar
mov NUMB,al
call WriteChar
cmp AL,13
JE konvertal
call ReadChar
mov NUMC,al
call WriteChar
cmp AL,13
JE konvertal
call ReadChar
mov NUMD,al
call WriteChar
cmp AL,13
JE konvertal
call ReadChar
mov NUME,al
call WriteChar
cmp AL,13
JE konvertal
call ReadChar
mov NUMF,al
call WriteChar
cmp AL,13
JE konvertal
call ReadChar
mov NUMG,al
call WriteChar
cmp AL,13
JE konvertal
call ReadChar
mov NUMH,al
call WriteChar
cmp AL,13
JE konvertal
call ReadChar
mov NUMI,al
call WriteChar
cmp AL,13
JE konvertal
call ReadChar
mov NUMJ,al
call WriteChar
cmp AL,13
JE konvertal
konvertal:
Call Crlf
sub NUM1, '0'
sub NUM2, '0'
sub NUM3, '0'
sub NUM4, '0'
sub NUM5, '0'
sub NUM6, '0'
sub NUM7, '0'
sub NUM8, '0'
sub NUM9, '0'
sub NUM10, '0'
sub NUMA, '0'
sub NUMB, '0'
sub NUMC, '0'
sub NUMD, '0'
sub NUME, '0'
sub NUMF, '0'
sub NUMG, '0'
sub NUMH, '0'
sub NUMI, '0'
sub NUMJ, '0'
szamkiiras1:
mov al,NUM10
movzx eax,al
imul eax,1
add SZAM1,eax
mov al,NUM9
movzx eax,al
imul eax,10
add SZAM1,eax
mov al,NUM8
movzx eax,al
imul eax,100
add SZAM1,eax
mov al,NUM7
movzx eax,al
imul eax,1000
add SZAM1,eax
mov al,NUM6
movzx eax,al
imul eax,10000
add SZAM1,eax
mov al,NUM5
movzx eax,al
imul eax,100000
add SZAM1,eax
mov al,NUM4
movzx eax,al
imul eax,1000000
add SZAM1,eax
mov al,NUM3
movzx eax,al
imul eax,10000000
add SZAM1,eax
mov al,NUM2
movzx eax,al
imul eax,100000000
add SZAM1,eax
mov al,NUM1
movzx eax,al
imul eax,1000000000
add SZAM1,eax
mov eax,SZAM1
call WriteInt
szamkiiras2:
Call Crlf
mov al,NUMJ
movzx eax,al
imul eax,1
add SZAM2,eax
mov al,NUMI
movzx eax,al
imul eax,10
add SZAM2,eax
mov al,NUMH
movzx eax,al
imul eax,100
add SZAM2,eax
mov al,NUMG
movzx eax,al
imul eax,1000
add SZAM2,eax
mov al,NUMF
movzx eax,al
imul eax,10000
add SZAM2,eax
mov al,NUME
movzx eax,al
imul eax,100000
add SZAM2,eax
mov al,NUMD
movzx eax,al
imul eax,1000000
add SZAM2,eax
mov al,NUMC
movzx eax,al
imul eax,10000000
add SZAM2,eax
mov al,NUMB
movzx eax,al
imul eax,100000000
add SZAM2,eax
mov al,NUMA
movzx eax,al
imul eax,1000000000
add SZAM2,eax
mov eax,SZAM2
call WriteInt
szorzas:
Call Crlf
mov SZAM1,eax
mov SZAM2,ebx
imul eax,ebx
call WriteInt
main endp
end main
これまでに得たコードを確認できますか? –
もちろん、申し訳ありませんが、今の説明にあります。 – Tomi
'mov eax、1FFFFFFFh mov ebx、1FFFFFFFh'、' mul ebx'の場合、結果はEDX:EAXにあり、EDX = '3FF FFFF'、EAX =' C000 0001'のように '3FF FFFF C000 0001'のようになります。 –