2 つの 32 ビット数値を加算および減算し、合計と差をメモリに格納するプログラムを作成しようとしています。出力はなく、デバッガーから結果を取得するだけです。
これが私のコードです。
;---------------------------------------------------------;
;**********************************************************
STACK SEGMENT PARA STACK 'STACK'
DB 64 DUP('STACK')
STACK ENDS
;**********************************************************
DSEG SEGMENT PARA PUBLIC 'DATA'
X1 DD 4967290
X2 DD 4967295
SUM DD ?
DIFF DD ?
DSEG ENDS
;**********************************************************
;---------------------------------------------------------
CSEG SEGMENT PARA PUBLIC 'CODE'
OUR_PROG PROC FAR
ASSUME CS:CSEG, DS:DSEG, SS:STACK
; Set up the stack to contain the proper values
; so this program can return to debug.
;
PUSH DS ; Put return seg. addr on stack
MOV EAX,0 ; Clear a register EAX
PUSH EAX ; Put zero return address on stack
; Initialize the data segment address
MOV EAX,DSEG ;Initialize DS
MOV DS,AX
; -------------------------------------------------------------
; Perform the addition
;
MOV EAX,X1 ; Load 32 bit variable in X1 to reg AX
MOV EBX,X2 ; Load 32 bit variable in X2 to reg BX
ADD EAX,EBX ; Add data in registers AX and BX, store in AX
; Store the sum in memory
;
MOV SUM,EAX ; Store the result at mem loc SUM
; -------------------------------------------------------------
; Perform the subtraction
MOV EAX,X1 ; Reload first word to reg EAX
CMP EAX,EBX ; Compare values of X1 and X2 stored in registers EAX and EBX
JL .SWAPSUB ; If EBX is greater than EAX, jump to SWAPSUB
JL .NOSWAP ; If '' , jump past other sub section
.SWAPSUB: ;Jump point to swap values
XCHG EAX,BX ; Swap values of EAX and EBX
.NOSWAP:
SUB EAX,EBX ; Subtract EBX from EAX
MOV DIFF,EBX ; Store the result at mem loc DIFF
RET ; Retrurn to DEBUG
OUR_PROG ENDP
CSEG ENDS
END OUR_PROG
;**********************************************************
アセンブリについてはよくわかりませんが、DOSBOX、MASM 5.10、およびリンカー プログラムを使用してコードをビルドしています。
私が抱えていると思われる問題は、コードをビルドしようとすると、それが定義されていないことですEAX
。EBX
また、 orへの呼び出しIllegal size for operand
ごとにも表示されます。MOV
SUM
DIFF
私が間違っていること、またはこれを行うためのより簡単な方法を誰かに教えてもらえますか? 私は数時間それを理解しようとしてきましたが、ほとんど進歩していません。
ありがとう!