《王爽汇编语言》读书笔记

1.debug命令
d: 查看内存数据. eg: d ds:0
u: 汇编代码方式显示内存指令. eg: u cs:0
t: 单步执行CS:IP指示的指令. 
a: 修改指定位置的数据
e: 修改指定位置的汇编代码
g: 执行指令直到指定地址,eg: g 0012, 使Debug从当前的CS:IP指向的指令执行,一直到(IP)=0012h为止
p: 情景一,一次执行完一个循环指令(loop), 假如循环100次,如果用t命令那不是得执行100次?
情景二,执行到程序最后的指令int 21h时,需使用p指令,debug将提示“Program terminated normally“

2.debug的t命令在执行修改寄存器ss的指令时,下一条指令也紧接着被执行

3.以简化的方式进行编译和连接
在编译或链接命令末加上分号,则不询问是否生成中间文件,而是直接生成目标文件

4.在汇编源程序中,数据不能以字母开头,应在字母前加0。如,A000h应写成0A000h。

5.debug和masm对指令的不同处理

(1) 在汇编源程序中,如果用指令访问一个内存单元,则在指令中必须用“[...]”来表示内存单元,如果在“[]”里用一个常量idada直接给出内存单元的领衔地址,就"[]"的前面显式地给出段地址所在的段寄存器。比如
mov al,ds:[0]
如果没有在"[]"的前面显式地给出段地址所在的段寄存器,比如
mov al,[0] ;等效于mov al,0
那么,编译器masm将把指令中的"[idata]"解释为"idata"。
(2) 如果在"[]"里用寄存器,比如bx,间接给出内存单元的偏移地址,则段地址默认在ds中。当然,也可以显式地给出段地址所在的段寄存器。
mov al,[bx] ;等效于mov al,ds:[bx]

6.DOS和其他合法的程序一般不会使用0:200~0:2ff(00200h~002ffh)的256个字节的空间。

7.指令mov ax,[bx+200], 也可以写成下列形式
mov ax, [200+bx]
mov ax, 200[bx]
mov ax,[bx].200
这种方式为高级语言实现数组提供了便利

8. si和di是8086CPU中和bx功能相近的寄存器,但si和di不能够分成两个8位寄存器来使用

9.关于bx、si、di、bp寄存器

(1)在8086中,只有bx、si、di、bp这4个寄存器可以用在"[...]"中来进行内存单元的寻址,其它是错误的。

(2)在[...]中,这4个寄存器可以单个出现,或只能以4种组合出现:bx和si、bx和di、bp和si、bp和di。

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

10.转移指令
转移的目的地址在指令中的jmp指令
jmp short 实现段内短转移,(IP)=(IP)+8位位移(-128~127)
jmp near ptr 实现段内转移(近转移),(IP)=(IP)+16位位移(-32768~32767)
jmp far ptr 实现段间转移(远转移),修改CS与IP的值
jcxz 有条件转移指令,所有的有条件转移指令都是短转移,在对应的机器码中包含的位移,而不是目的地址。对IP的修改范围都为:-128~127

11.中断
(1)响应中断的特殊情况
cpu执行完设置ss的指令后,CPU并不响应中断,而是接着执行下一条指令,如
mov ax,1000h
mov ss,ax 
mov sp,0
这是为了保护栈顶指针的正确性,sp的设置指令应该紧接在ss的设置之后
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值