汇编实验命令

r:查看修改寄存器中的内容
d:查看内存中的内容
e:修改内存中的内容
u:将内存中的内容解释为机器指令和对应的汇编指令
t:执行CS:IP指向的内存单元的指令
a:以汇编指令的方式向内存中写入指令
g: -g 0012 Debug到 cs+0012位置
p:自动执行循环中的命令直到(cx)=0

dw定义字型数据
使用 a 1000:0将以10000H为起始写入代码

将数据从寄存器送入内存
mov bx,1000H
mov ds,bx
move [0],al

3.4 mov add sub指令
mov 寄存器 数据
mov 寄存器 寄存器
mov 寄存器 内存单元

3.5
mov 内存单元 寄存器
mov 段寄存器 寄存器 mov ds ax
mov 寄存器 段寄存器
段寄存器主要包含:

CS(Code Segment) : 代码寄存器,程序代码的基础位置。
CS:IP执行指令位置
DS(Data Segment): 数据寄存器,变量的基本位置。
SS(Stack Segment): 栈寄存器,栈的基础位置。
ES(Extra Segment): 其他寄存器,内存中变量的其他基本位置。

mov ax,[0]发生错误
使用 mov,ax,[1]即可。原理未知。

push ax 入栈
pop ax 出栈
段寄存器SS,寄存器SP
SS:SP指向栈顶元素
push:Sp=Sp-2 mov SS:SP ax

D命令,查看内存单元命令
-r ds:1000
-d ds:0 查看从1000:0开始的内存内容
-r ds:1000
-d ds:10 18查看1000:10至1000:18中的内容
-d cs:0查看当前代码段中的指令代码
-d ss:0查看当前栈段中的内容。

E命令:修改内存中的内容
A命令:以汇编指令的方式向内存中写入指令
U命令:将内存中的内容解释为机器指令和对应的汇编指令

-r ds
:1000
-e ds:0 11 22 33 44 55 66;在从1000:0开始的内存中写入数据
-u cs:0;以汇编指令形式,显示当前代码段中的代码,0代码的偏移地址
-r ds
:1000
-a ds:0;以汇编指令的形式,向从1000:0开始的内存单元中写入指令。

SI和DI寄存器
SI和DI是8086CPU和bx功能相近的寄存器,SI和DI不能分为两个8位寄存器使用

定义reg和sreg, reg:寄存器, streg:段寄存器

reg:ax,bx,cx,dx,ah,al,bh,bl,ch,cl,dh,dl,sp,bp,si

sreg:ds,ss,cs,es

1.总结:8086CPU中,只有bx,si,di,bp可以用[...]来进行内存寻址
正确用法:
mov ax,[bx]
mov ax,[bx+si]
mov ax,[bp]
mov ax,[bp+si]
mov ax,[bp+di]
错误用法:
mov ax,[cx]
mov ax,[ax]
mov ax,[dx]
mov ax,[ds]

2.在[...]中,4个寄存器可以单独出现,或只能以4种组合出现:
bx和si,
bx和di,
bp和si,
bp和di(记忆,带b和不带b的组合出现)

3.在[...]中使用寄存器bp,而指令中没有显性给出段地址,段地址默认在ss中

mov ax,[bp] 含义:(ax)=((ss)16+(bp))
mov ax,[bp+idata]含义:(ax)=((ss)
16+(bp)+idata)
mov ax,[bp+si]含义:(ax)=((ss)16+(bp)+(si))
mov ax,[bp+si+idata]含义:(ax)=((ss)
16+(bp)+(si)+idata)

1.div指令
除数:8位或16位,在寄存器或者内存中
被除数:除数为8位,被除数为16位,被除数放在AX中。除数为16位,被除数为32位,DX存高16位,AX存低16位
结果:除数为8位,AL存商,AH存余数。除数为16,AX存商,dx存余数。
格式:
div reg
div 内存单元

例:div byte prt ds:[0]
(al)=(ax)/((ds)16+0) 商
(ah)=(ax)/((ds)
16+0)余数

div word ptr es:[0]
(ax)=[(dx)10000h+(ax)]/((es)16+0)商
(dx)=[(dx)10000h+(ax)]/((es)16+0)余数

伪指令dd
dd用来定义双字节dword数据。

dup操作符
1.db 3 dup (0)
定义三个字节,它们的值都为0,相当于db 0,0,0
2.db 3 dup (0,1,2)
定义了9个字节,是0,1,2,0,1,2,0,1,2
dup的使用格式:
db 重复的次数 dup
dw 重复的次数 dup
dd 重复的次数 dup

10.8 mul指令
(1)两个相乘的数要么都是8位,要么都是16位。如果是8位,一个默认放在al中,另一个放在8位reg或内存字节单元中
如果是16位,一个默认放在ax中,另一个放在16位reg或者内存字单元中。
(2)结果:8位乘法,结果默认放在AX中,如果是16位乘法,结果高位放在dx中,低位在ax中。
格式如下:
mul reg
mul 内存单元
内存单元可以通过不同的寻址方式给出
mul byte ptr ds:[0]
(ax)=(al)((ds)16+0);

mul word ptr [bx+si+8]
(ax)=(ax)((ds)16+(bx)+(si)+8) 结果的低16位
(dx)=(ax)((ds)16+(bx)+(si)+8) 结果的高16位
计算10010
mov al,100
mov bl,10
mul bl
结果(ax)=1000
计算100
10000
mov ax,100
mov bx,10000
mul bx
结果(ax)=4240h (dx)=000FH

posted @ 2024-10-09 14:59  zhongta  阅读(21)  评论(0)    收藏  举报