逆序存放:
assume cs:code,ds:data,ss:stk
data segment
dw 0123h,0456h,0789h
data ends
stk segment
dw 0,0,0,0,0,0
stk ends
code segment
start: mov ax,data
mov ds,ax
mov ax,stk
mov ss,ax
mov sp,000ch
mov bx,0
mov cx,3
s: push [bx]
add bx,2
loop s
mov bx,0
mov cx,3
s0: pop [bx]
add bx,2
loop s0
mov ax,4c00h
int 21h
code ends
end start
大小写转换:
assume cs:code,ds:data,ss:skt
data segment
db '1.aqw'
db '1.bqw'
db '1.cqw'
db '1.dqw'
db '1.eqw'
db '1.fqw'
data ends
skt segment
db 0,0,0,0,0,0,0,0,0,0
skt ends
code segment
strat:
mov ax,data
mov ds,ax
mov ax,skt
mov ss,ax
mov sp,16
mov bx,0
mov cx,6
s:push cx
mov si,3
mov cx,3
s0:mov al,[bx+si]
and al,11011111b
mov [bx+si],al
inc si
loop s0
add bx,5
pop cx
loop s
mov ax,4c00h
int 21h
code ends
end strat
其实就是或、与运算
C中嵌入汇编:
假如a=4,b=5,交换ab的值
我们可以很容易写出:
#include<stdio.h>
int main()
{
int a = 4, b =5;//交换ab的值
printf("交换前%d %d\n", a, b);
a = a ^ b;
b = a ^ b;
a = a ^ b;
return 0;
printf("交换后%d %d\n", a, b);
}
如何使用汇编来解决呢?也很简单:
1.在每条汇编指令之前加 __asm 关键字:
比如:
__asm mov eax, a;
__asm mov ebx, b;
__asm xor eax, ebx;
因为 __asm 关键字是语句分隔符,所以可以把多条汇编指令放在同一行:
__asm mov eax, a,__asm mov ebx, b,__asm xor eax, ebx;
改写程序:
#include<stdio.h>
int main()
{
int a = 4, b =5;//交换ab的值
printf("交换前%d %d\n", a, b);
_asm mov eax, a _asm mov ebx, b _asm xor eax, ebx _asm xor ebx, eax _asm xor eax, ebx _asm mov a, eax _asm mov b, ebx;
printf("交换后%d %d\n", a, b);
return 0;
}
2._asm块
比如:
_asm
{
mov eax, a;
mov ebx, b;
xor eax, ebx;
}
改写程序:
#include<stdio.h>
int main()
{
int a = 4, b =5;//交换ab的值
printf("交换前%d %d\n", a, b);
_asm
{
mov eax, a;
mov ebx, b;
xor eax, ebx;
xor ebx, eax;
xor eax, ebx;
mov a, eax;
mov b, ebx;
}
printf("交换后%d %d\n", a, b);
retuen 0;
}