include Irvine32.inc.stack 4096
ExitProcess PROTO,dwExitCode:DWORD.code
main PROC mov eax,80mov ebx,53call BitwiseMultiplycall WriteDecINVOKE ExitProcess,0
main ENDP;EAX=被乘數,EBX=乘數
BitwiseMultiply PROCmov edx,0mov ecx,32
L0:shl ebx,1jnc L1push ecxdec ecxpush eaxshl eax,cladd edx,eaxpop eaxpop ecx
L1:loop L0mov eax,edxret
BitwiseMultiply ENDPEND main
2:編寫過程,實現任意兩個大小(但兩個數字節要一樣長)的壓縮十進制數加法
include Irvine32.inc.stack 4096
ExitProcess PROTO,dwExitCode:DWORDbyteSize =4.data
packed_1 BYTE 36h,45h,87h,99h
packed_2 BYTE 72h,07h,23h,45h
sum BYTE byteSize+1DUP(0).code
main PROCmov esi,OFFSET packed_1mov edi,OFFSET packed_2mov edx,OFFSET summov ecx,byteSizecall AddPackedINVOKE ExitProcess,0
main ENDP;ESI 第一個數的指針
;EDI 第二個數的指針
;EDX 和數指針
;ECX 相加的字節數
AddPacked PROCclc
L0:mov al,BYTE PTR[esi]adc al,BYTE PTR[edi]daamov BYTE PTR[edx],alinc esiinc ediinc edxloop L0mov al,0adc al,0mov BYTE PTR[edx],alret
AddPacked ENDP
END main
3:LEA : 偽指令LEA使用
.386.model flat,stdcall.stack 4096
ExitProcess PROTO,dwExitCode:DWORD.code
main PROCINVOKE ExitProcess,0
main ENDP;voidmakeArray();{;char myString[30];;for(int i =0;i<30;i++); myString[i]='*';;}
makeArray PROCpush ebpmov ebp,espsub esp,32;myString位于EBP-30的位置,因為會向4字節對齊lea esi,[ebp-30];加載myString的地址;mov esi,OFFSET[ebp -30] 報錯,OFFSET只適用編譯時已知地址mov ecx,30;循環計數器
L1:mov BYTE PTR[esi],'*';填充inc esi ;下一個元素loop L1 add esp,32;刪除數組(恢復ESP)pop ebpret
makeArray ENDP
END main
4:ENTER_LEAVE : ENTER創建一個過程的堆棧幀,LEAVE結束一個過程的堆棧幀
.386.model flat,stdcall.stack 4096
ExitProcess PROTO,dwExitCode:DWORD.code
main PROCINVOKE ExitProcess,0
main ENDPMySub PROCenter 8,0;保留8個字節局部變量;等于;push ebp;mov ebp,esp;sub esp,8 leave;等于;mov esp,ebp;pop ebpret
MySub ENDP
END main
5:LOCAL : 為ENTER和LEAVE的高級版,可以定義局部變量類型與名字,跟在PROC后使用 LOCAL label:type ,…
.386.model flat,stdcall.stack 4096
ExitProcess PROTO,dwExitCode:DWORD.code
main PROCcall Example1INVOKE ExitProcess,0
main ENDPExample1 PROCLOCAL temp:DWORDmov eax,tempret
Example1 ENDP;生成匯編是下面這樣,可以查看反匯編
;push ebp
;mov ebp,esp
;add esp,0FFFFFFFCh ;ESP加-4;mov eax,[ebp-4];leave
;ret
END main
6:遞歸函數,整數求和
include Irvine32.inc.code
main PROCmov ecx,5;計數值=5mov eax,0;存放和數call CalcSum;計算和數call WriteDeccall Crlfexit
main ENDPCalcSum PROCcmp ecx,0;檢查計數值jz L2 ;若為零則退出add eax,ecx ;否則與和數相加dec ecx ;計數值遞減call CalcSum;遞歸調用
L2: ret
CalcSum ENDP
END main
7:遞歸函數,階乘
include Irvine32.inc.code
main PROCpush 5;計算5!call Factorial ;計算階乘(EAX)call WriteDeccall Crlfexit
main ENDP;計算階乘
;接收:[ebp+8]=n 需計算的數
;返回:eax =n 階乘
Factorial PROCpush ebpmov ebp,espmov eax,[ebp+8];獲取Ncmp eax,0ja L1mov eax,1jmp L2L1:dec eaxpush eaxcall Factorial
;每次遞歸調用返回時,都要執行下面的指令
ReturnFact:mov ebx,[ebp+8]mul ebx ;EDX:EAX = EAX*EBX
L2:pop ebp ;返回EAXret 4;清除堆棧
Factorial ENDP
END main
8:INVOKE_ADDR : 調用指令INVOKE 與 地址指令ADDR
.386.model flat,stdcall.stack
ExitProcess PROTO,dwExitCode:DWORD.data
Array DWORD 20DUP(?).code
main PROC;INVOKE Swap,ADDR Array,ADDR [Array+4];ADDR只能與INVOKE使用,也能是匯編常數;如果是使用stdcall,匯編器生成下面代碼;push OFFSET Array+4;push OFFSET Array;call SwapINVOKE ExitProcess,0
main ENDPSwap PROCret
Swap ENDP
END main
從鍵盤輸入一個字符,判斷其是不是大寫字母,如果是則請輸出這個大寫字母,如果不是請輸出“這不是一個大寫字母”的英文信息(要求:能連續輸出直到輸出“#”結束)。
P155 例4.13
DATA SEGMENT
STR DB 0DH,0…
c語言getc函數C語言中的getc()函數 (getc() function in C) Prototype: 原型: int getc(FILE *filename);Parameters: 參數: FILE *filenameReturn type: int 返回類型: int Use of function: 使用功能: In the file handling…
c語言feof函數C語言中的feof()函數 (feof() function in C) Prototype: 原型: int feof(FILE* filename);Parameters: 參數: FILE *filenameReturn type: int(0 or 1) 返回類型: int(0或1) Use of function: 使用功能: In C l…
Modules used: 使用的模塊: For this, we will use the opencv-python module which provides us various functions to work on images. 為此,我們將使用opencv-python模塊,該模塊為我們提供了處理圖像的各種功能。 Download opencv-pytho…
mcq 隊列Q1. What do you call the technique of storing encrypted user passwords in Linux? Q1。 您如何稱呼在Linux中存儲加密的用戶密碼的技術? System Password Management 系統密碼管理 Shadow Password 影子密碼 Encrypted Password 加密密碼 None of the…