汇编语言·易遗忘知识点汇总ing

1.lea 和 offset比较

例题:假设myword是一个字变量,指出下列语句的错误原因:

mov bx,offset myword[si]

原因:寄存器的值只有程序执行时才能确定,而offset是汇编过程计算的偏移地址,故无法确定,应该改为:

lea bx,myword[si]

lea vs offset

lea 是机器指令,offset 是伪指令。

lea bx,myword[si] ; 在实际执行时才会将myword[si]的地址放入bx
mov bx,offset myword[si] ;在编译时就需要计算出myword[si]的偏移地址,但是寄存器si的值只有在执行时才能确定,所以不可以!

 

2.cmp正确使用

(1) 目标操作数不能为立即数
(2) 不能同时为存储器
例:假设x,y是已经定义的变量,下列哪些指令是非法的?

(1)CMP 15,BX
(2)CMP X,25
(3)CMP X,Y
(4)CMP AX,X
答:
(1)CMP 15,BX
   立即数只能用作源操作数,这里用作目的操作数
(2)CMP X,25
   正确
(3)CMP X,Y
   两个操作数不能都是内存单元
(4)CMP AX,X
   若X定义为字类型,正确;否则,错误,类型不匹配。

 

3.db,dw,dd的区别

db定义字节类型变量,一个字节数据占1个字节单元,读完一个,偏移量加1

dw定义字类型变量,一个字数据占2个字节单元,读完一个,偏移量加2

dd定义双字类型变量,一个双字数据占4个字节单元,读完一个,偏移量加4

 

4.SHL、SHR、SAL、SAR的区别

在这里插入图片描述

SHL(Shift Left): 逻辑左移
SHR(Shift Right): 逻辑右移
SAL(Shift Arithmetic Left): 算术左移
SAR(Shift Arithmetic Right): 算术右移

其中的 SHL 和 SAL 相同, 但 SHR 和 SAR 不同.

SHL、SAL: 每位左移, 低位补 0, 高位进 CF
SHR : 每位右移, 低位进 CF, 高位补 0
SAR : 每位右移, 低位进 CF, 高位不变
 

5.xlat

XLAT作用:将((BX)+(AL))送给(AL)
即:将BX为首地址的,偏移地址为AL的内容送给AL.
 

6.org

org是Origin的缩写:起始地址,源。
在汇编语言源程序的开始通常都用一条ORG伪指令来实现规定程序的起始地址。
 

7.align

ALIGN 伪指令将一个变量对齐到字节边界、字边界、双字边界或段落边界。
 

8.startup

源程序用 startup 伪指令指明执行的起始点
 

9.DOS调用

源程序采用DOS功能调用的4CH子功能实现程序返回DOS
 

10.INC,DEC

inc 加1指令
dec 减1指令
 

11.ds

不能直接把值赋给ds
应该

mov ax,2
mov ds,ax

 

12.rep movsb

movsb指令用于把字节从ds:si 搬到es:di;rep是repeat的意思,rep movsb 就是多次搬运。搬运前先把字符串的长度存在cx寄存器中,然后重复的次数就是cx寄存器所存数据的值。

 

13.cld和std

CLD与STD是用来操作方向标志位DF
CLD使DF复位,即DF=0,STD使DF置位,即DF=1.用于串操作指令中。

配合使用
     movs( MOVe String) ;串传送指令
     movsb   ;字节串传送
     movsw   ;字串传送

   执行操作:[DI] = [SI] ,将位于DS段的由SI所指出的存储单元的字节或字传送到位于ES段的由DI 所指出的存储单元,再修改SI和DI, 从而指向下一个元素.
在执行该指令之前,必须预置SI和DI的初值,用STD或CLD设置DF值.

  1.目的串必须在附加段中,即必须是ES:[DI]
  2.源串允许使用段跨越前缀来修饰,但偏移地址必须是[SI])

 

14.div

(1) 除数: 有 8 位和 16 位两种, 在一个寄存器或内存单元中.

(2) 被除数: 默认放在 ax 或 dx 和ax 中,
  如果除数为 8 位, 被除数则为 16 位, 默认在 ax 中存放;
  如果除数为 16 位, 被除数则为 32 位, 在 dx 和 ax 中存放, dx 存放高 16 位, ax 存放低 16 位.

 
3.结果

如果除数为8位,则被除数为16位,则结果的商存放与al中,余数存放于ah中。

如果除数为16位,则被除数为32位,则结果的商存放与ax中,余数存放于dx中。

如果除数为32位,则被除数为64位,则结果的商存放与eax中,余数存放于edx中。

 

15.neg

neg指令
即用0减操作数,并将求得的结果存入指定的寄存器或内存单元(把操作数按位取反,末位加1)
 

附1:寄存器

在这里插入图片描述

附2:条件指令

在这里插入图片描述

  • 3
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

居贝比

如有帮助,打个赏,恰个饭~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值