汇编语言指令系统

1.mov在上篇文章中已经介绍

2.PUSH和PoP指令都必须根据当前SP的内容来确定进栈或出栈的存储单元,而且必须及时修改指针,以保证(SP)指向当前的栈顶。
(1) 堆栈的存取必须以字为单位,(IBM PC中不允许字节堆栈),所以PUSH和POP指令只能作字操作。
(2) 它们可以使用初立即数以外的其他寻址方式。
(3) 指令也可以指定段寄存器作为操作数,注意POP绝对不能使用代码段(CS)寄存器。
(4) 这两条指令不影响标志位。 

利用堆栈进行现场保护:
push AX
push BX
  .
         .其他要执行的程序
         .
pop BX
pop AX
注意进出栈的顺序。

3.
XCHG交换指令
   格式为      XCHG   OPRl,  OPR2
    执行操作:         (OPRl) 〈一一〉 (OPR2)其中OPR表示操作数。该指令的两个操作数中必须有一个在寄存器中,因此,它可以是寄存器之间;寄存器和存储器之间交换信息,注意不能使用段寄存器。指令允许字和字节操作,且不会影响标志位。

4.累加器专用传送指令
IN      (input)    输入
OUT  (output)  输出
XLAT(Translate)   换码
这组指令只限于使用累加器AX和AL传送信息。

注意:
(1) 所有的I/O端口与CPU之间的通信都由IN和OUT指令来完成。其中IN完成从I/O到CPU的信息传送,而OUT完成从CPU到I/O的信息传送。
(2) CPU只和累加器(AX或AL)进行接收或发送信息,外部最多可以有64K个端口,端口号为0000H – FFFFH。
(3) 长格式:对于前256个端口,可以在指令中直接指定,这就是常格式的端口(PORT)。
(4) 短格式:当端口号大于等于256时,则必须先将端口号置于DX寄存器中,然后再利用IN或OUT进行信息的传递。
(5) 注意,在利用IN/OUT进行信息传递时,所有的端口号(或DX的内容)均为地址,而传送的均为端口号的内容。
输入、输出指令不影响标志位。
例      IN        AX,28H
              MOV   DATA_WORD , AX
这两条指令把地口28的内容经过AX传送到存储单元DATA_WORD中。
例     MOV    DX,3FCH
IN         AX,DX
从端口03FCH送一个字到AX寄存器中。
例         OUT     5,   AL
从AL寄存器输出一个字节到端口5

5.XLAT换码指令
格式为;         XLAT    OPR
                 或    XLAT
执行的操作:  (AL)  〈一  ((BX)十(AL))
功能:将一种代码转换为另一种代码。
在使用这条指令之前,应该先建立一个字节表格,表格的首地址提前存入BX寄存器,需要转换的代码应该是相对于表格首地址的位移量也提前存放在AL寄存器中,表格的内容则是需要转换的代码,该指令执行后就可在AL中得到转换后的代码。
该指令可以使用XLAT或XLAT   OPR两种格式中的任一种,使用XLAT   OPR时,OPR为表格的首地址(一般为符号地址),但在这里的OPR只是为提高程序的可读性而设置的,指令执行时只使用预先已存入BX中的表格首地址,而并不用汇编格式中指定的值。该指令不影后标志位。
例       如(BX) = 0040H,(AL)=0FH,(Ds)=F000H
 
指令                  XLAT
把   F0000H+0040H+0FH的内容送AL,所以指令执行后:(AL) = 2CH
     即指令把AL中的代码0FH转换为2CH。
必须注意,由于AL为8位二进制位,所以表格的最大长度不能超过256。

6.地址传送指令
LEA   有效地址送寄存器
LDS   指针送寄存器和DS
LES   指针送寄存器和ES
这一组指令完成把地址送到指定寄存器的功能。
1.LEA   有效地址送寄存器
             格式:    LEA   REG,SRC
     执行过程:    (REG)<-   SRC
     完成功能:    指令将有效地址送到指定的寄存器中。
2.LDS   指针送寄存器和DS
    格式:    LDS   REG,SRC
    执行的操作:(REG)〈一(SRC)
                           (DS)〈-   (SRC十2)
把源操作数指定的4个相继字节送到由指令指定的寄存器及DS寄存器中。该指令通常用来指定SI寄存器。
3.LES   指针送寄存器和ES
    格式:    LES   REG,SRC
    执行的操作:(REG)〈一(SRC)
                           (ES)〈-   (SRC十2)
把源操作数指定的4个相继字节送到由指令指定的寄存器及ES寄存器中。该指令通常用来指定DI寄存器。
注意:以上三条指令,不能指定段寄存器,指令操作不影响标志位
本组指令把变量的偏移地址(LEA)或段地址和偏移地址(LDS和LES)送给寄存器,以提供访问变量的工具。
    例 :         LEA    BX,[BX十SI十0F62H]
    如指令执行前 (BX)=0400H,(SI)=003CH
    则指令执行后 (BX)=0400十003C十0F62=139EH
    必须注意,在这里BX寄存器得到的是偏移地址而不是该存储单元的内容。
    例:        LDS   SI,[10H]
    如指令执行前  (DS)=C000H,(C0010H)=0180H,(C0012H)=2000H
    则指令执行后    (S1)=0180H,(DS)=2000H
    例           LES    DI,[BX]
    如指令执行前  (DS)=B000H,(BX)=080AH,(0B080AH)=05AEH,(0B080CH)=4000H
    则指令执行后    (D1)=05AEH,  (ES)=4000H

7. 标志位寄存器传送指令
LAHF    标志寄存器的低字节送AH
SAHF    AH送标志寄存器的低字节
PUSHF  标志进栈
POPF     标志出栈
1.LAHF  标志送AH指令
格式为:    LAHF
执行的操作:  (AH)〈- (PSW寄存器的低字节)
2.SAHF    AH送标志寄存器指令
格式为:   SAHF
执行的操作:(PSW的低字节)一〉(AH)
3.PUSHF   标志进栈指令
格式为;    PUSHF
执行的操作:  (SP) 〈-  (SP)-2
((SP)+1,(SP))〈-   (PSW)
4.POPF   标志出栈
格式为:POPF
执行过程为:   (PSW)    〈--     ((SP)十1,(SP))
                                     (SP) 〈一  (SP)十2
      这组指令中的LAHF和PUSHF不影响标志位。SAHF相POPF则由装入的值来确定标志位的值

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值