アセンブリ言語(intel 8086)で2桁の4桁を追加するコードを実行しています。コードのある時点で、AX = 2AB3(10進数では10931)、BX = 2710(10進数では10000)など、AXをBXレジスタ(div BXを使用)で除算したいと考えています。アセンブリ言語で分割するとオーバーフローが発生する
通常、結果としてAX = 1(商)とDX = 3A3(余り)が必要ですが、問題はエミュレータがオーバーフローメッセージを表示することです。
DATA SEGMENT
MSG1 DB 0DH,0AH, "first number : $" ,0DH
MSG2 DB 0DH,0AH, "second number : $" ,0DH
RST DB 0DH,0AH, "result : $" ,0DH
DATA ENDS
PILE SEGMENT PARA STACK
DB 128 DUP (?)
PILE ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,SS:PILE
DEBUT:
mov ax,data
mov ds,ax
mov dx,offset MSG1 ; first msg
mov ah,9
int 21h
mov ah,1 ; multipling first number by 1000 and store it
int 21h
sub al,30h
mov ah,0
mov bx,1000
mul bx
push ax
mov ah,1 ; multipling second number by 100 and store it
int 21h
sub al,30h
mov ah,0
mov bx,100
mul bx
push ax
mov ah,1 ; multipling third number by 10 and store it
int 21h
sub al,30h
mov ah,0
mov bx,10
mul bx
push ax
mov ah,1 ; last number
int 21h
sub al,30h
mov ah,0
push ax
mov dx,offset MSG2 ;same thing for the second 4 digits number
mov ah,9
int 21h
mov ah,1
int 21h
sub al,30h
mov ah,0
mov bx,1000
mul bx
push ax
mov ah,1
int 21h
sub al,30h
mov ah,0
mov bx,100
mul bx
push ax
mov ah,1
int 21h
sub al,30h
mov ah,0
mov bx,10
mul bx
push ax
mov ah,1
int 21h
sub al,30h
mov ah,0
push ax
;-------------------------------
;here I'm doing the addition to all the stored numbers to have the result number
;in the DX register
pop dx
pop bx
add dx,bx
pop bx
add dx,bx
pop bx
add dx,bx
pop bx
add dx,bx
pop bx
add dx,bx
pop bx
add dx,bx
pop bx
add dx,bx
push dx ; I've stored the result number because I'm going to use the DX register to show the
; third message
mov dx,offset RST
mov ah,9
int 21h
pop dx ;restore the result number
mov ax,dx
mov bx,10000
div bx ;I'm dividing the result number by 10000 to have the first number of the result number
;in AX register (quotient) , the error message show up here
push dx
push ax
pop dx
add dl,30h
mov ah,2
int 21h
pop ax
mov bx,1000 ;deviding by 1000 to have the second number
div bx ;same error
push dx
push ax
pop dx
add dl,30h
mov ah,2
int 21h
pop ax
mov bx,100
div bx
push dx
push ax
pop dx
add dl,30h
mov ah,2
int 21h
pop ax
mov bx,10
div bx
push dx
push ax
pop dx
add dl,30h
mov ah,2
int 21h
pop dx
add dl,30h
mov ah,2
int 21h
私たちは、コードあなたを見ることができる。ここ
はコードがあります再作業中、または関連する部分 – halfer
命令セットリファレンスを参照しましたか?配当は「DX:AX」になっていますか? 'DX'を正しくセットアップしましたか?なぜコードを表示していないのですか?あなたはSOのgazillion重複を見ましたか? – Jester
(あなたの英語は私にとってはうまくいくようですが、ここでは言語に関する謝罪は含まれません(https://stackoverflow.com/search?tab=newest&q=sorry%20for%20my%20English) - これは別のことです編集する)。 – halfer