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