【汇编语言笔记】内存地址操作,跳转指令

第五章   内存地址的操作

立即数取址 [constant]

通用寄存器取址 [bx]

索引寄存器取址 [si] [di]

通用寄存器加上常数进行取址[bx+constant]或者constant[bx]

通用寄存器加上索引寄存器进行取址 [bx+si]或者[bx+di],或者[bx][si] 或者[bx][di]

通用寄存器加上索引寄存器加上常数进行取址[bx+si+constant]

 

 

还可以利用逻辑语句,开启或者关闭特殊的地址位,

AND AX,LOGIC_OPERAND

LOGIC_OPERAND中含有0的为关闭该地址位,含有1的为保持该地址位。

OR AX,LOGIC_OPERAND

            LOGIC_OPERAND中含有0的为保持该地址位,含有1的为开启该地址位。

 

字符序列转化为8位的ASCII码,存于内存中,特殊的有‘0’-30H  ‘A’ -41H  ‘a’ -61H

大小写转化可以用AND OR 进行转化。

 

可以利用LOOP与[BX]实现二维数组的遍历

 

处理数据需要解决两个问题:

处理数据在什么地方/处理数据有多长,这些对于任何处理机都是同样面临的问题。

访问位置由前述所给出;

处理数据可以由目的寄存器类型指出,也可由操作符  X  PTR 指出,例如:

WORD PTR [ram]                          BYTE PTR [ram]

还有一种,指令已经指明操作数的大小 PUSH  POP

 

补充的操作指令:

DIV     B8/B8  B16/B16 B16/B8  B32/B32  B32/B16 B32/B8

            除数放在reg或者内存中

                            被除数放在AX中,如放置不下,则高位放在DX,低位放在AX

                            结果:除数如为8位,则AL放置商,AH放置除数

                                               除数如为16位,则AX存放商,DX存放余数

                            格式为:  DIV REG  或者    DIV  [RAM]  或者 DIV  BYTE PTR DS:[BX+SI+0]

                   MUL   B8*B8         B8*B16    B16*B16

                            一个乘数放置于寄存器或者内存中,另一个乘数 如果是8位,放置在AL;如果是16位,放在AX中

                            结果:默认放置在AX中,如果是16位乘法,高位放置在DX,低位放在AX中

                            格式: MULREG  或者   MUL [RAM] 或者  MUL  BYTE PTR [BX+SI+0]

 

                   DUP   复制连续数据,可用于预留数据空间  格式: DB 3 DUP(?)

                  

第六章   转移指令

可以修改IP 或者可以修改CS和IP的指令统称为转移指令。

OFFSET 取得标号的偏移地址

 

JMP 无条件转移指令,可以修改IP,也可以修改CS和IP

JMP指令对应的机器码记录了需要跳转的距离(向后跳转用补码表示)

 

CALL /RET指令实现子程序。

RET用栈中的数据修改IP,RETF用栈中的指令修改CS和IP。

即,RET  等效于  POP IP——IP=SS:SP    SP=SP+2

RETF 等效于 POP CS   POP IP——CS=SS:SP   SP=SP+2   IP=SS:SP    SP=SP+2

 

CALL指令 将当前IP或CS压栈,进行转移  相当于

PUSH IP

   JMP NEAR PTR [LABEL]

        

编写子程序就是要实现CALL与RET的相互配合使用,而对于参数传递问题,将使用寄存器或者内存来辅助传递参数,或者利用栈来实现参数传递。对于寄存器冲突问题,可以使用栈先保存原程序的寄存器内容

 

对于条件跳转指令,需要借助于标志寄存器中特定位的值。该寄存器可以保存相关指令的执行结果,可以为CPU执行指令提供依据,可以控制CPU的相关工作方式。

         假设有数有N位,

注意SF为记录有符号数的符号位,即第N-1位

CF记录无符号数的进位,即无符号数运算的溢出,即第N位

OF记录有符号数运算的溢出

                   在CMP比较中,OF=1,溢出,说明实际大小与表观大小相反

                                                        SF=0说明前者大于后者

条件跳转指令:

指令                            跳转条件

JNZ                              CF=0

JZ                                 CF=1

JA                                 CF=0

JB                                 CF=1

JG                                 OF=0&SF=0  或者           OF=1&SF=1

JL                                  OF=0&SF=1      或者         OF=1&SF=0

寄存器的状态可以利用PUSHF和POPF指令进行压栈、出栈操作

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值