匯編入門學習筆記 16X+Y
阿新 • • 發佈:2018-01-09
star gpo 表達式 入門學習 表達 數據 style art 語言
題目:設X和Y均為16位無符號數,寫一個求表達式16X+Y的值
加法實現:
代碼如下:
DATAS SEGMENT ;此處輸入數據段代碼 XXX DW 1234H ;設X為1234H YYY DW 5678H ;設Y為5678H ZZZ DD ? ;用Z來保存最後運算的結果DATAS ENDS STACKS SEGMENT ;此處輸入堆棧段代碼 STACKS ENDS CODES SEGMENT ASSUME CS:CODES,DS:DATAS,SS:STACKS START: MOV AX,DATAS MOV DS,AX MOV AX,XXX ;講X送至AX,作為三十二位結果的低十六位儲存 XOR DX,DX ADD AX,AX ;X*2 AX是低十六位,無需接收進位用ADD ADC DX,DX ;DX 是高十六位,需要接收進位,用ADC ADD AX,AX ;X*4ADC DX,DX ADD AX,AX ;X*8 ADC DX,DX ADD AX,AX ;X*16 ADC DX,DX ADD AX,YYY ;X+Y; ADC DX,DX MOV WORD PTR ZZZ,AX ;將低16位AX中的數據,復制傳送到變量Z所指向的兩個字節16位存儲單元中。 ;因為ZZZ定義的是雙字,所以不能直接MOV ZZZ,AX 而是使用WORD PTR 將ZZZ變量地址當作字變量來使用 MOV WORD PTR ZZZ+2,DX ;;將高16位DX中的數據傳送到相應位置,因為前面低十六位占兩個內存單元,所以這裏從兩個內存單元之後進行儲存MOV AH,4CH INT 21H CODES ENDS END START
乘法實現:
DATAS SEGMENT ;此處輸入數據段代碼 XXX DW 1234H ;設X為1234H YYY DW 5678H ;設Y為5678H ZZZ DD ? ;用Z來保存最後運算的結果 DATAS ENDS STACKS SEGMENT ;此處輸入堆棧段代碼 STACKS ENDS CODES SEGMENT ASSUME CS:CODES,DS:DATAS,SS:STACKS START: MOV AX,DATAS MOV DS,AX MOV AX,XXX ;講X送至AX,作為三十二位結果的低十六位儲存 MOV DX,16 MUL DX ;MUL 匯編語言無符號數乘法指令 ;格式:MUL SRC 執行的操作: ;字節操作數:(AX)←(AL)*(SRC) ;字操作數:(DX,AX)←(AX)*(SRC) ADD AX,YYY ;X+Y; ADC DX,DX MOV WORD PTR ZZZ,AX ;將低16位AX中的數據,復制傳送到變量Z所指向的兩個字節16位存儲單元中。 ;因為ZZZ定義的是雙字,所以不能直接MOV ZZZ,AX 而是使用WORD PTR 將ZZZ變量地址當作字變量來使用 MOV WORD PTR ZZZ+2,DX ;;將高16位DX中的數據傳送到相應位置,因為前面低十六位占兩個內存單元,所以這裏從兩個內存單元之後進行儲存 MOV AH,4CH INT 21H CODES ENDS END START
匯編入門學習筆記 16X+Y