設有兩個16位整數變量A和B,試編寫完成下述操作的程序。
(1)若有兩個數中一個是奇數,則將奇數存入A中,偶數存入B中。
(2)若兩個數均為奇數,則兩數分別減1,并存回原變量中。
(3)若兩數均為偶數,則兩變量不變。
即只需要分成兩大類判斷即可,①A、B一奇一偶 ②A、B都是奇數或同是偶數;然后,同奇或同偶再進行細分,是同奇還是同偶
匯編思路:首先DATA段定義A、B變量。其次,A賦值給AX,B賦值給BX,使用AX、BX進行參與運算。AX和BX進行異或運算,結果存放到AX中,然后與0001H進行TEXT與運算,判斷AX的最后結果,結果為1,則A、B一奇一偶,否則為A、B同奇或同偶。一奇一偶,XCHG交換兩數;若同偶,調用4CH結束即可;若同奇,分別減一DEC,然后輸出即可。
代碼如下:
DATA SEGMENT
A DW ?
B DW ?
DATA ENDS
CODE SEGMENTASSUME CS:CODE,DS:DATA
START: MOV AX,DATAMOV DS,AX
LOP: MOV AX,A ;將變量A賦值給通用寄存器AXMOV BX,B ;將變量B賦值給通用寄存器BXXOR AX,BX ;異或運算是為了判斷A、B是否為一奇一偶、同奇或同偶,若AX最后一位為1,則一奇一偶,否則A、B同奇或同偶TEXT AX,0001H;與運算,只需要判斷最后一位是否為1,結果為1,則A、B一奇一偶,否則為A、B同奇或同偶JZ NEXT ;若最后AX結果為0,即A、B同奇或同偶,跳轉NEXT標簽處 否則,A、B一奇一偶,執行下條指令TEXT BX,0001H;執行到此條指令,此時A、B一奇一偶已確定,只需要奇數存入A,偶數存入B即可 由于XOR AX,BX此時的AX已經不再存放原來A中內容,但是BX仍存放B的內容,需要判斷BX是否為奇數 執行此命令與運算操作,結果若為0,表示BX為偶數,則A為奇數 反之結果為1,BX為奇數,A為偶數JZ EXIT ;若BX為0,即AX為奇數,BX為偶數,跳轉EXIT標簽處 否則執行下條指令XCHG BX,A ;執行到此條指令前,此時AX為偶數,BX為奇數,即A存放偶數,B存放奇數,交換A和BX的數據,即A存放BX的奇數,BX存放A的偶數MOV B,BX ;將BX存放A的偶數賦值給B,最終,A存放奇數,B存放偶數JMP EXIT ;無條件跳轉到EXIT標簽處
NEXT: TEXT BX,0001H;執行到此條指令前,已確定A、B同奇或同偶,由于XOR AX,BX此時的AX已經不再存放原來A中內容,但是BX仍存放B的內容,需要判斷BX是否為奇數 執行此命令與運算操作,結果若為0,表示BX為偶數,則A也為偶數,即同偶,否則同奇JZ EXIT ;若BX為0,即同偶,跳轉EXIT標簽處 否則執行下條指令DEC B ;執行到此條指令前,此時A、B同奇,由題目要求需要兩數分別減一,并存回原變量中 B減一DEC A ;A減一
EXIT: MOV AH,4CH ;執行到此條指令前,表示AX為奇數,BX為偶數,即A存放奇數,B存放偶數,由題目要求可得,直接輸出即可,調用4CH號功能,返回DOS操作系統指令INT 21H ;終止當前程序的運行,并返回DOS系統
CODE ENDSEND START