汇编基础

1.8086CPU 的所有寄存器都是16位的,可以存放两个字节。
  20位地址总线,1MB寻址能力
  通用寄存器:AX(AH和AL)、BX(BH和BL)、CX(CH和CL)、DX(DH和DL)
  段寄存器:CS、DS、SS、ES
  SI、DI与bx功能相似


2.byte:字节,8bit
  word:字,2个字节


3.16位结构/16位机/字长16位 = 寄存器16位
  物理地址 = 段地址*16 + 偏移地址


4.CS:代码段寄存器
  IP:指令指针寄存器
  在任意时刻,CS:IP 指向下一条指令的地址;
  修改CS:IP的内容:“JMP 段地址:偏移地址”,仅修改IP时使用JMP AX(AX存放修改后的地址);
  DS通常用来存放要访问数据的段地址,指令执行时,8086CPU自动取DS中的数据作为内存单元的段地址


5.在任意时刻,SS:SP 指向栈顶元素;栈顶放在低地址
  8086CPU对push和pop的操作都是以字为单位
  POP只移动栈顶指针,不清楚数据,当有新数据入栈将覆盖原数据


6.程序返回
  mov ax,4c00H
  int 21H


7.[bx]表示一个内存单元,段地址在ds中,偏移地址在bx中
例:mov ax,[bx]


8.8086CPU中只有bx、si、di、bp可以用在[...]中来进行内存单元的寻址,只要[...]使用寄存器bp,
而指令中没有显性的给出段地址,段地址就默认在ss中


9.汇编中数据位置的表述
  (1)立即数
  (2)寄存器
  (3)段地址+偏移地址


10.指令要处理的数据长度
   (1)使用的寄存器
   (2)在没有寄存器名的情况下,用操作符X ptr (word ptr、byte ptr)指明内存单元的长度
   (3)栈操作数据为字类型


PS:


 1.对段寄存器的操作要通过通用寄存器来间接操作,例:修改段寄存器DS
   MOV BX,1000H
   MOV DS,BX
   MOV AL,[0]
   [0]表示一个内存单元,此处表示1000:0处的地址


2.汇编代码
assume cs:code,ds:data,ss:stack
 //data为数据段、stack为栈段、code为代码段
 data segment
    db //定义字节 地址+1
    dw 0123h,0456h //定义字类型 地址+2
    dd //定义双字 地址+4  
 data ends


 stack segment
    dw 0,0
 stack ends


code segment
  start:mov ax,stack //栈段名就是段地址
         mov ss,ax
         mov ax,data  //数据段名就是数据段的段地址
         mov ds,ax
code ends


end start
解析:
(1).assume 伪指令,含义"假设"。它假设某一段寄存器和程序中的某一个用segment。。。ends定义的段相关联
assume将有特定用途的段和相关的段寄存器关联起来
(2)segment和ends成对使用的伪指令,
功能:定义一个段
使用格式
段名 segment
  ..
  ..
段名 ends
段名在程序编译链接后作为段地址
(3)dw = "define word",含义定义字型数据
   此处段地址为cs,dw定义位于代码段开始部分,所以偏移地址为0,定义的数据物理地址为CS:0、CS:2


3.寻址方式(定位内存地址的方法)
  [0]、
  [bx]、
  [bx(si、di)+idata]、
  [bx+si]和[bx+di]
  [bp+si]\[bp+di]


4.大小写字母转换
大写字母的第五位为0,小写字母的第五位为1
将大写字母的ASCII与1101 1111B进行与操作可转换为小写字母,原理ASCII-20H


汇编指令:mov,add,SUB,PUSH,POP,LOOP,and(逻辑与),or(逻辑或),inc


1.loop会进行两步操作:
  (1)cx = cx -1;
  (2)cx中的值不为0则继续执行loop
功能:使用loop实现循环,cx存放循环次数


2.以下书写格式是同一个意思
(1)mov ax,[bx+200]
   mov ax 200[bx] //数组的存储方式
   mov ax,[bx].200


(2)mov ax,[bx+si]
   mov ax,[bx][si](常用)


(3)mov ax,[bx+200+si]
   mov ax,[200+bx+si]
   mov ax,200[bx][si]
   mov ax,[bx].200[si]
   mov ax,[bx][si].200
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值