汇编语言基础程序(持续更修…)
-
数组求和
ExitProcess PROTO.dataarr WORD 1,2,3,4,5,6,7,8,9,10 .code main PROCmov rbx, 0mov rcx, LENGTHOF arr ;获取arr元素个数mov rsi, OFFSET arr ;获取arr的首地址 Addsum:add bl, [rsi] ;获取rsi寄存器中保存地址对应的值x,bl += xadd rsi, TYPE WORD ;获取arr数组的下一个元素地址loop Addsummov rax, rbx main ENDP END
-
字符串复制
ExitProcess PROTO.datasrc_str BYTE "this is a test",0dst_str BYTE 50 DUP(?) .code main PROCmov rcx, LENGTHOF src_str ;获取src_str元素个数mov rsi, OFFSET src_str ;获取src_str的首地址mov rbx, OFFSET dst_str ;获取dst_str首地址 copy_string:mov r8, rbxmov al, [rsi]mov [rbx], aladd rsi, 1 ;获取arr数组的下一个元素地址add rbx, 1loop copy_stringmov r8, rbx main ENDP END
-
交换双字变量的高低16位
ExitProcess PROTO.datathree DWORD 11112222h .code main PROCmov r8, OFFSET three + 2mov eax, three ;ax 2222mov bx, WORD PTR [r8] ;bx 1111xchg WORD PTR three, bxxchg WORD PTR [r8], ax main ENDP END
-
利用运行时堆栈反转字符串
;64位汇编程序模板 (Template) ;声明一个ExitProcess函数 ExitProcess PROTO.datamy_str BYTE "this is a test",0my_strlen WORD ($ - my_str) - 1 .code main PROCmov rbx, OFFSET my_strmovzx rcx , my_strlenmov rsi, 0 push_str:movzx rax, my_str[rsi]push raxinc rsiloop push_strmovzx rcx , my_strlenmov rsi, 0 pop_str:pop raxmov my_str[rsi], alinc rsiloop pop_str main ENDP END
-
从主过程中调用其他过程实现属组求和
ExitProcess PROTO.dataarr WORD 1234h, 2345h, 3456h, 4567harrSum WORD 0arrSum2 WORD 1 .code Sum_arry PROCpush rcxmov rsi, 0mov rax, 0 L1:mov ax, arr[rsi]add arrSum, axinc rsiloop L1mov arrSum, axpop rcxret Sum_arry ENDPmain PROCmov rcx, LENGTHOF arrcall Sum_arry main ENDP END