posts - 34,comments - 2,trackbacks - 0

1、指令: jmp 段地址:偏移地址      ->修改段地址CS和偏移地址 IP
   指令: jmp 某一合法寄存器        ->仅修改IP的内容,CS不变、

2、WINDOWS DOS 下的Debug指令
R->查看、改变寄存器内容  “-r” 查看   “ -r ax ” 修改
D->查看内存的内容  ①、“d 段地址:偏移地址 ”  从1000:0处开始显示内存,共128个单元
      ②、“d 段地址:偏移地址  结尾偏移地址” 
E->改写内存的内容 “e 起始地址 数据 数据 数据 ...” 联系改写一系列数据
U->把内存单元翻译成汇编指令     "u 起始地址"
T->执行一条汇编指令
A->命令以汇编指令的形式在内存中写入机器码

3、mov 指令:①、将数据直接送入寄存器 ②、将一寄存器的内容送到另一寄存器
③、将一个内存单元中的内容送入一个寄存器中 “mov 寄存器名,内存单元” mov al,[0]
④、“MOV 内存单元地址,寄存器名 ” 将数据从寄存器送入内存单元  mov [0],al
[...]表示一个内存单元的偏移地址,CPU自动取ds的数据作为内存单元的段地址。

4、CS:IP  与 SS:SP操作
CS:IP存放着当前指令的段地址和偏移地址
SS:SP栈顶的段地址存放在SS中,偏移地址存放在SP中,任意时刻SS:SP指向栈顶元素

5、mov  add sub  指令中寄存器 、内存单元、与普通数据的关系
mov
寄存器 ->数据     //注意:段寄存器不能直接mov ,要经过普通寄存器AX
寄存器 ->内存单元
寄存器 ->寄存器   寄存器->段寄存器
段寄存器 ->寄存器
段寄存器->内存单元
内存单元->寄存器
内存单元->段寄存器

add    //结果放到寄存器中
寄存器 + 数据    
寄存器 + 内存单元
寄存器 + 寄存器  
段寄存器 + 寄存器
段寄存器 + 内存单元
内存单元 +寄存器    //数据放到内存单元中

sub
寄存器 - 数据    
寄存器 - 内存单元
寄存器 - 寄存器  
内存单元 -寄存器    //数据放到内存单元中

6、push与pop指令
push 寄存器
push 段寄存器
push 内存单元

pop 寄存器
pop 段寄存器
pop 内存单元

注意:CPU执行push 指令是:先改变sp,后向SS:SP出传送。执行pop指令是:先读取SS:SP出的数据,后改变SP
执行push、pop操作,修改的是SP,栈顶的变化范围最大为: 0-FFFFH

7、
可执行文件加载入内存后,cx存放的是程序的长度、

8、[bx]表示一个内存单元,它的偏移地址在bx 中,mov ax,[bx]。  或者mov al,[bx]。

9、()①、寄存器、②、段寄存器、③、内存单元的物理地址
(ax)表示ax中的内容。(al)表示al中的内容

例如:
(20000H)表示20000H单元的内容    ()中的内存单元的地址为物理地址
((ds) *16+(bx))  ds中的内容ADR1,bx内容 ADR2   内存  ADR1*16+ADR2 .ds作段地址,bx作偏移地址。

10、cx 与 loop 指令 实现循环

mov cx,循环次数
s:
      循环执行的程序段
loop s
注意::一些乘法可以用循环相加

11、注意:
①、在汇编源程序中,数据不能以字母开头。 mov ax,0ffffH
②、g命令:   “g 0012” 表示执行到当前代码段(段地址在CS中)的0012h处
③、p命令:   p命令执行,debug自动重复执行loop s  和循环指令,这两条指令。知道(cx)=0
④、编译器不能识别 mov ax, [0]  他当作 mov ax ,0 处理。 但debug模式下是可以的。
在汇编源程序中需要显式地给出段地址所在的段寄存器,   
mov ax,2000H
mov ds,ax
mov al,ds:[0]    ;显示地给出段寄存器的地址

posted on 2011-11-30 20:35 Yu_ 阅读(478) 评论(0)  编辑 收藏 引用 所属分类: 汇编

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   博问   Chat2DB   管理