【6】汇编语言的一些些

  1. 二进制如何进行加减乘除运算的
  2. 二进制与十进制的转换

XCHG指令不允许的情况有以下四种
1. 不能同时都为内存操作数 (存储器)
2. 任何一个操作数都不能为段寄存器
3. 任何一个操作数不能为立即数
4. 两个操作数的长度必须相等

指令格式:XCHG OPRD1,OPRD2
            目的 源
功能:将一个字节或一个字的源操作数和目的操作数相交换。

交换指令可以在寄存器之间,寄存器与存储器之间进行,具体形式如下:

XCHG Reg,Reg 例如: XCHG AL,CL
XCHG Reg,Mem 例如: XCHG AX,BUF1
XCHG Mem,Reg 例如: XCHG COUNT[SI],BX


伪指令

伪指令语句告诉汇编程序如何进行汇编,但它没有对应的机器码
  1. 段定义语句——用来定义一个逻辑段
 XXXX(段名) SEGMENT [定位类型] [组合类型] [分类名]
 XXXX ENDS
段名: 用户指定,确定了该逻辑段在存储器中的段基址,即高16位物理地址
对于堆栈段,组合类型STACK不可省略

  2. 段分配语句——ASSUME
告诉汇编程序,4个段寄存器分别与哪些段有关。8086CPU系统中,存储器采用分段结构,每段容量<=64KB,用户可以设置多个逻辑段,但最多只允许4个逻辑段同时有效。
ASSUME CS: CODE DS: DATA SS: SSTACK ES: 附加段名
 各段的段名必须是用SEGMENT 和ENDS 定义过的段名。
ASSUME 虽然能给各个段分配相应的段寄存器,但不能将段基址装入相应的寄存器,因此要给DS ES SS寄存器赋初值。同时,不允许用户对CS进行初始化,而是在程序装入后由操作系统对CS:IP赋初值。而对堆栈,除了SS寄存器外,还要给SP赋初值,设置了SS:IP也就设置了堆栈。

DATA SEGMENT    ;数据段
X DB ?
Y DB ?
DATA ENDS

EXTRA SEGMENT   ;附加段,用于字符串操作时,存放目的串
ALPHA DB ?
BETA DW ?
EXTRA ENDS

STACK SEGMENT PART STACK 'STACK'    ;堆栈段 100个字节大小 TOP是SP的值
STAPN DB 100 DUP(?)
TOP EQU LENGTH STAPN    ;TOP的值是STAPN的大小,100.
STACK ENDS

CODE SEGMENT
MAIN PROC FAR
    ASSUME CS:CODE, DS:DATA 
            ES:EXTRA,SS:STACK
START: MOV AX,STACK          ;STACK中存的是16位立即数,偏移地址
    MOV SS,AX                ;立即数和段寄存器之间无法直接交换数据
    MOV SP,TOP               ;堆栈指针,TOP的内容是100,STAPN的大小
    PUSH DS
    SUB AX,AX
    PUSH AX
    MOV AX,DATA
    MOV DS,AX
    MOV AX,EXTRA
    MOV ES,AX
    RET
MAIN ENDP
CODE ENDS
    END MAIN

设置堆栈的第二种方法:

STACK SEGMENT STACK
DW 50 DUP(?)    ;50个字(100个字节)的存储单元,偏移地址00~99
TOP LABEL WORD  ;TOP定义位字变量,偏移地址100
STACK ENDS

CODE SEGMENT
START:MOV AX,STACK
    MOV SS,AX
    MOV SP,OFFSET TOP    ;TOP的偏移地址100给堆栈指针SP
CODE ENDS
    END START

  3. 过程定义语句——PROC RET ENDP
过程名 PROC [NEAR]/FAR     必须说明是近过程还是远过程 NEAR——段内调用(可省) FAR——段间调用
   ……
   RET    RET n 可以返回一个数
   ENDP
  4. 变量定义语句——数据定义语句,位数据项分配存储单元,即用一个符号与该存储单元联系
变量名 DB/DW/DD/DQ/DT 操作数
DUP(?)复制操作符 用来定义重复变量——如开辟一大块存储单元,规定了大小和初值(?表示不确定)
  5.其他伪指令
EQU——等值
  COUNT EQU 8
LABEL——定义类型
  TOP LABEL WORD——将TOP定义为字变量
EVEN——对准
  将下一条语句指向的地址调整为偶地址(8086从奇地址访问字单元时,存取一个字数据要进行两次操作)
ORG——指定起始偏移地址
PUBLIC EXTERN——模块链接指令

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值