日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

汇编语言-012(扩展加法指令ADC、带借位减法指令SBB、执行加法后进行ASCII调整指令、AAS 、AAM、AAD 、DAA指令将和数转成压缩十进制格式)

發(fā)布時(shí)間:2023/12/1 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 汇编语言-012(扩展加法指令ADC、带借位减法指令SBB、执行加法后进行ASCII调整指令、AAS 、AAM、AAD 、DAA指令将和数转成压缩十进制格式) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

1:ADC : 擴(kuò)展加法指令A(yù)DC

.386 .model flat,stdcall.stack 4096 ExitProcess PROTO,dwExitCode:DWORD.code main PROCmov dl,0mov al,0FFhadd al,0FFh ;AL=FEhadc dl,0 ;DL:AL = 01FEhmov edx,0mov eax,0FFFFFFFFhadd eax,0FFFFFFFFh ;EAX = FFFFFFFEhadc edx,0 ;EDX:EAX = 00000001FFFFFFFEhINVOKE ExitProcess,0 main ENDP END main

2:擴(kuò)展加法指令應(yīng)用,計(jì)算兩個(gè)以字節(jié)數(shù)組存放的擴(kuò)展整數(shù)之和

include Irvine32.inc.stack 4096 ExitProcess PROTO,dwExitCode:DWORD.data op1 BYTE 34h,12h,98h,74h,06h,0A4h,0B2h,0A2h op2 BYTE 02h,45h,23h,00h,00h,86h,10h,80h sum BYTE 9 DUP(0).code main PROCmov esi,OFFSET op1 ;第一個(gè)操作數(shù)mov edi,OFFSET op2 ;第二個(gè)操作數(shù)mov ebx,OFFSET sum ;和數(shù)mov ecx,LENGTHOF op1;字節(jié)數(shù)call Extended_Addmov esi,OFFSET summov ecx,LENGTHOF sumcall Display_Sumcall CrlfINVOKE ExitProcess,0 main ENDP;計(jì)算兩個(gè)以字節(jié)數(shù)組存放的擴(kuò)展整數(shù)之和 ;接收:ESI和EDI 為兩個(gè)加數(shù)的指針 ; EBX為和數(shù)變量指針,ECX為相加的字節(jié)數(shù) ;和數(shù)存儲(chǔ)區(qū)必須比輸入的操作數(shù)多一個(gè)字節(jié) ;返回:無 Extended_Add PROCpushadclc L1:mov al,[esi] ;取第一個(gè)數(shù)adc al,[edi] ;與第二個(gè)數(shù)相加pushfd ;保存進(jìn)位標(biāo)志mov [ebx],al ;保存部分和add esi,1add edi,1add ebx,1popfd ;恢復(fù)進(jìn)位標(biāo)志loop L1mov BYTE PTR[ebx],0 ;清除和數(shù)高字節(jié)adc BYTE PTR[ebx],0 ;加上其他的進(jìn)位popadret Extended_Add ENDPDisplay_Sum PROCpushad;指向最后一個(gè)元素add esi,ecxsub esi,TYPE BYTEmov ebx,TYPE BYTE L1:mov al,[esi] call WriteHexB ;顯示該字節(jié)sub esi,TYPE BYTEloop L1popadret Display_Sum ENDPEND main

3:SBB : 帶借位減法指令SBB

.386 .model flat,stdcall.stack 4096 ExitProcess PROTO,dwExitCode:DWORD.code main PROC;32位操作數(shù)實(shí)現(xiàn)64位減法;EDX:EAX = 0000000700000001h - 2mov edx,7 ;32位mov eax,1 ;32位sub eax,2 sbb edx,0 ;EDX:EAX = 00000006FFFFFFFEhINVOKE ExitProcess,0main ENDP END main

4:AAA : 執(zhí)行加法后進(jìn)行ASCII調(diào)整指令

.386 .model flat,stdcall.stack 4096 ExitProcess PROTO,dwExitCode:DWORD.code main PROCmov ah,0 ;清空AHmov al,'8' ;AX = 0038hadd al,'2' ;AX = 006Ahaaa ;AX=0100h(結(jié)果進(jìn)行ASCII調(diào)整)or ax,3030h ;AX = 3130='10'(轉(zhuǎn)換為ASCII碼)INVOKE ExitProcess,0 main ENDP END main

5:AAA指令應(yīng)用,多字節(jié)加法(ASCII碼方式的),有隱含固定小數(shù)點(diǎn)的串執(zhí)行ASCII運(yùn)算

include Irvine32.incDECIMAL_OFFSET = 5 ;距離串右側(cè)的偏移量 .data decimal_one BYTE "100123456789765" ;1001234567.89765 decimal_two BYTE "900402076502015" ;9004020765.02015 sum BYTE (SIZEOF decimal_one + 1) DUP(0),0.code main PROC;從最后一個(gè)數(shù)字位開始mov esi,SIZEOF decimal_one - 1mov edi,SIZEOF decimal_onemov ecx,SIZEOF decimal_onemov bh,0 ;進(jìn)位值清零 L1:mov ah,0 ;執(zhí)行加法前清除AHmov al,decimal_one[esi] ;取第一個(gè)數(shù)字add al,bh ;加上之前的進(jìn)位值aaa ;調(diào)整和數(shù)AH=進(jìn)位值mov bh,ah ;將進(jìn)位值保存到BHor bh,30h ;轉(zhuǎn)換為ASCII碼add al,decimal_two[esi] ;加第二個(gè)數(shù)字aaa ;AH = 進(jìn)位值or bh,ah ;保存的進(jìn)位值與現(xiàn)在進(jìn)位值oror bh,30h ;轉(zhuǎn)成ASCII碼or al,30h ;將al轉(zhuǎn)成ASCII碼mov sum[edi],al ;保存到sumdec esidec ediloop L1mov sum[edi],bh ;保存最后進(jìn)位值 ;顯示和數(shù)字符串mov edx,OFFSET sumcall WriteStringcall Crlfexit main ENDP END main

6:AAS : 執(zhí)行減法后且進(jìn)行ASCII調(diào)整指令

.386 .model flat,stdcall.stack 4096 ExitProcess PROTO,dwExitCode:DWORD.data val1 BYTE '8' val2 BYTE '9'.code main PROCmov ah,0mov al,val1 ;AX =0038sub al,val2 ;AX = 00FFhaas ;AX = FF09hpushf ;保存進(jìn)位標(biāo)志or al,30h ;AX = FF39hpopf ;恢復(fù)進(jìn)位INVOKE ExitProcess,0 main ENDP END main

7:AAM : 執(zhí)行乘法后執(zhí)行的ASCII調(diào)整

.386 .model flat,stdcall.stack 4096 ExitProcess PROTO,dwExitCode:DWORD.data AscVal BYTE 05h,06h.code main PROCmov bl,AscValmov al,[AscVal+1]mul bl ;AX = 001Ehaam ;AX = 0300hINVOKE ExitProcess,0 main ENDP END main

8:AAD : 執(zhí)行除法前執(zhí)行的ASCII調(diào)整

.386 .model flat,stdcall.stack 4096 ExitProcess PROTO,dwExitCode:DWORD.data quotient BYTE ? remainder BYTE ?.code main PROCmov ax,0307h ;被除數(shù)aad ;AX = 0025hmov bl,5 ;除數(shù)div bl ;AX = 0207hmov quotient,almov remainder,ahINVOKE ExitProcess,0 main ENDP END main

9:DAA : 壓縮十進(jìn)制數(shù)相加后,DAA指令將和數(shù)轉(zhuǎn)成壓縮十進(jìn)制格式,ADD或ADC指令在AL中生成二進(jìn)制和數(shù),DAA在加法后執(zhí)行

.386 .model flat,stdcall.stack 4096 ExitProcess PROTO,dwExitCode:DWORD.code main PROC;計(jì)算35+48mov al,35hadd al,48h ;AL = 7Dhdaa ;AL = 83h(調(diào)整后的結(jié)果)INVOKE ExitProcess,0 main ENDP END main

10:DAA應(yīng)用,將兩個(gè)16位壓縮十進(jìn)制整數(shù)加法,和數(shù)保存在一個(gè)壓縮的雙字

include Irvine32.inc.data packed_1 WORD 4536h packed_2 WORD 7207h sum DWORD ?.code main PROC;初始化和數(shù)與索引mov sum,0mov esi,0;低字節(jié)相加mov al,BYTE PTR packed_1[esi]add al,BYTE PTR packed_2[esi]daamov BYTE PTR sum[esi],al;高字節(jié)相加,包括進(jìn)位標(biāo)志位inc esimov al,BYTE PTR packed_1[esi]adc al,BYTE PTR packed_2[esi]daamov BYTE PTR sum[esi],al;若還有進(jìn)位,則加上該進(jìn)位值inc esimov al,0adc al,0mov BYTE PTR sum[esi],al;用十進(jìn)制顯示和數(shù)mov eax,sumcall WriteHexcall Crlfexit main ENDP END main

總結(jié)

以上是生活随笔為你收集整理的汇编语言-012(扩展加法指令ADC、带借位减法指令SBB、执行加法后进行ASCII调整指令、AAS 、AAM、AAD 、DAA指令将和数转成压缩十进制格式)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。