编写计算表达式(X-Y+25)/Z的值得程序,要求将其商和余数分别放在A、B单元中。(设X和Y是32位无符号数,A、B和Z是16位无符号数,不考虑溢出情况。)
編寫計算表達式(X-Y+25)/Z的值得程序,要求將其商和余數分別放在A、B單元中。(設X和Y是32位無符號數,A、B和Z是16位無符號數,不考慮溢出情況。)
P151
例4.8
匯編思路:首先在DATA段定義X、Y、Z、A、B單元,其中由于X、Y是32位無符號數,所以類型定義為DD,Z定義為DW類型,A、B用于存放最后結果的商和余數部分,均定義為DW類型。STACK段,開辟50DB大小的運算存儲空間。CODE段,由于X的類型為DD,所以需要使用修改屬性運算符PTR指定位于其后的存儲器操作數的類型,先將X的低字內容存放到AX中,然后AX與Y相減,即AX存放(X-Y)的低字內容部分;然后,DX存放X的高字內容,由于X的類型為DD,即指向下一個字需要+2,且也要使用修改屬性運算符PTR指定位于其后的存儲器操作數的類型。然后讓AX低字內容+25,完成(X-Y+25)的低字內容運算的最終結果,使用ADC AX,0;使用帶進位的加法指令,因為AX在與25相加的時候有可能存在進位現象,需要使用ADC帶進位的加法指令。最終,AX存放低字部分內容,DX存放高字部分內容。然后,開始除Z,DIV Z;由于是無符號數,所有除法運算使用無符號數除法指令DIV,即隱含被除數為DX(高字),AX(低字),除數為Z,最后商存放在AX中,余數存放在DX中,AX賦值給A,DX賦值給B。最后調用4CH號功能返回到DOS系統,程序結束。
代碼如下:
DATA SEGMENT X DD 334467ABH ;隨機的數 Y DD 0DF342189H ;隨機的數 Z DW 5476H ;隨機的數 A DW ? ;用于存放最后結果的整數部分,即除完之后的商 B DW ? ;用于存放最后結果的小數部分,即除完之后的余數 DATA ENDS STACK SEGMENT STACKDB 50 DUP(0) ;使用stack棧,開辟一段運算空間(大小為50DB) STACK ENDS CODE SEGMENTASSUME CS:CODE,DS:DATA,SS:STACK START: MOV AX,DATAMOV DS,AXMOV AX,WORD PTR X ;由于X定義為DD類型即2個字,這里將X的低字內容賦值給AXSUB AX,WORD PTR Y ;AX與Y的低字內容相減,即X和Y的低字內容相減,最后存放在AX中MOV DX,WORD PTR X+2 ;X和Y均是DD類型,高字內容需要+2,即將X的高字內容賦值給DXSBB DX,WORD PTR Y+2 ;X和Y均是DD類型,此時的DX為X所對應高字內容,因為要考慮到低字內容運算時是否借位\進位,所有用SBB帶借位的減法指令 即X的高字內容-Y的高字內容ADD AX,25 ;X-Y+25 讓AX低字內容加,因為25相加應該從低位相加,而不是讓DX高字內容加ADC DX,0 ;因為需要考慮到進位的問題,這里使用帶進位的加法指令ADC,使得DX加上進位,DX最終存放的是(X-Y+25)高字內容DIV Z ;因為X和Y都是無符號數,所以,除法運算使用無符號數除法指令DIV運算,(DX高位與AX低位)/Z --- AX存放商,DX存放余數MOV A,AX ;AX存放的商保存到A中MOV B,DX ;DX存放的余數保存到B中MOV AH,4CH ;調用4CH號功能,返回DOS操作系統指令INT 21H ;終止當前程序的運行,并返回DOS系統 CODE ENDSEND START總結
以上是生活随笔為你收集整理的编写计算表达式(X-Y+25)/Z的值得程序,要求将其商和余数分别放在A、B单元中。(设X和Y是32位无符号数,A、B和Z是16位无符号数,不考虑溢出情况。)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 离婚需要多少钱啊?
- 下一篇: 摩尔庄园手游餐厅好评度怎么快速提升