1、寄存器:
数据寄存器:
ax/al:主要用于累加
bx/bl:常存基址
cx/cl:用作计数
dx/dl:存数据
指针与变址寄存器:
si:源变址指针寄存器
di:目的变址
sp:堆栈指针寄存器
bp: 基址寄存器
段寄存器:
CS:代码段
DS:数据段
SS:堆栈段
ES:附加段
指令指针寄存器:
IP
2、案例:
assume
cs:code,ds:data,ss:stack
data segment
dw 0123H,
data ends
satck segment stack
dw 0,0,0,0,0,0,0,0
stack ends
code segment
start:
mov ax,stack
mov ss,ax
mov sp,16 //8个字
mov ax,data
mov ds,ax
mov bx,0
push ds:[bx]
mov ax,4c00H
int 21H
code ends
3、将a 加b段放在c段
assume cs:code
a segment
db 1,2,3,4,5,6,7,8
a ends
b segment
db 1,2,3,4,5,6,7,8
b ends
c segment
db 0,0,0,0,0,0,0,0
c ends
code segment
start:
mov cx,8
mov bx,0
mov ax,a; a放到ds
mov ds,ax
mov ax,c ; c放到es
mov es,ax
/-------------------------------------
addnum: mov dx,0
mov ax,a ;利用dl将a,b相加
mov ds,ax
add dl,ds:[bx]
mov ax,b
mov ds,ax
add dl,ds:[bx]
mov es:[bx],dl;
inc bx
loop addnum
-------------------------------------------
修改
addnum: mov dx,0
mov dl,ds:[bx]
and dl,ds:[bx+16]
mov es:[bx],dl
inc bx
loop addnum
-------------------------------------------/
mov ax,4c00H
int 21H
code ends
end start
4、push将a的前8个数据逆序放到b:
assume cs:code
a segment
dw 1,2,3,4,5,6,7,8
a ends
b segment
dw 1,2,3,4,5,6,7,8
b ends
stack segment stack
dw 0,0,0,0,0,0,0,0
dw 0,0,0,0,0,0,0,0
stack ends
code segment
start:
mov ax,stack
mov ss,ax
mov sp,32
mov ax,a
mov ds,ax
mov bx,0
mov cx,8
pushdata: push ds:[bx]
add bx,2
loop pushdata
mov ax,b
mov es,ax
mov bx,0
mov cx,8
popdata: pop es:[bx]
add bx,2
loop popdata
mov ax,4c00H
int 21H
code ends
end start
5、and or
A 41H 0100 0001B ;or0010 0000B=>a
B 42H
a 61H 0110 0001B ;and1101 1111=>A
b 62H
例:
assume ss:stack,ds:data,cs:code
data segment
db 'ABCDEF'
db 'abcdef'
data ends
stack segment stack
dw 0,0,0,0,0,0,0,0
dw 0,0,0,0,0,0,0,0
dw 0,0,0,0,0,0,0,0
dw 0,0,0,0,0,0,0,0
stack ends
code segment
start:
mov ax,data
mov ds,ax
mov bx,0
mov ax,data
mov es,ax
mov cx,6
/-----------------------------------
downletter: mov dl,ds:[bx]
or dl,00100000B
mov es:[bx],dl
inc bx
loop downletter
mov cx,6
mov bx,6
upletter: mov dl,ds:[bx]
and dl,11011111B
mov es:[bx],dl
inc bx
loop upletter
mov ax,4c00H
int 21H
------------------------------------
修改
setletter: mov dl,ds:[bx]
or dl,00100000B
mov es:[bx],dl
mov dl,ds:[bx+6]
and dl,11011111B
mov es:[bx+6],dl
inc bx
loop setletter
------------------------------------/
code ends
end start