汇编语言基础归纳整理(一)

这里所描述的汇编语言以16位的8086CPU为准

值得你牢牢记住的细节

  1. mov指令不能将数据(立即数)直接送入段寄存器,不能在两个段寄存器之间直接传送数据,也不能在两个内存单元之间直接传送数据。
  2. addsub指令不可以对段寄存器进行操作。
  3. 栈的操作规则是“后进先出”且只进行操作,入栈是先将SP的内容减2再存放数据,出栈是先读取数据再将SP的内容加2,栈空间需要我们自己安排大小,栈顶超界问题需要我们自己注意。
  4. 用常数表示的地址一定要加段前缀。
  5. 标号标识了一个地址,而段名相当于一个标号,它代表了段地址
  6. 不可使用汇编指令、伪指令和其他特定含义的符号作为段名
  7. 标号前使用操作符offset才取得标号的偏移地址
  8. 在汇编源程序中,数据不能以字母开头,如果数据最高位为字母,就要在前面加0。

关于寻址方式

只有BX,SI,DI,BP这4个寄存器可以进行内存单元的寻址,这4个寄存器可以单独出现,或只能以4种组合出现:bx和si、bx和di、bp和si、bp和di。

几种寻址方式的常用格式及应用

寻址方式应用举例
立即寻址idata(idata为立即数)
寄存器寻址mov ax,bx(源操作数和目的操作数均为寄存器寻址)
直接寻址[idata]
寄存器间接寻址[bx]
相对寻址[bx+idata],用于数组:idata[si];用于结构体:[bx].idata
基址变址寻址[bx+si],[bx][si],[bp][di]:bx或bp为基址,si或di为变址
相对基址变址寻址[bx+si+idata],用于结构中的数组项:[bx].idata[si];用于二维数组:idata[bx][si]

几个简单的转移指令

无条件转移指令jmp

无条件的含义即任何时候程序执行到该指令都将跳转到指定位置。
jmp指令有以下几种格式:

  1. jmp short 标号
    段内短转移,只修改IP,转移的位移范围为-128~127,机器码占两个字节。
  2. jmp near ptr 标号
    段内近转移,只修改IP,转移的位移范围为-32768~32767,机器码占3个字节。
  3. jmp far ptr 标号
    段间转移,修改CS和IP,又称远转移,机器码占5个字节,转移的目的地址在指令中,高地址为段地址,低地址为偏移地址
  4. jmp 标号
    取决于转移的位移范围,一般为段内近转移。
    注意:如果转移的位移范围为-128~127,则以上4个格式都转变为jmp short 标号对应的机器码;如果转移的位移范围为-32768~32767,那么jmp short 标号将出错,jmp 标号、jmp near ptr 标号所对应机器码相同,jmp far ptr 标号产生对应5字节编码。
  5. jmp 16位reg
    用相应寄存器的内容修改IP的内容。
  6. jmp word ptr 内存单元地址(段内转移)
    内存单元地址处存放的是转移的目的偏移地址
  7. jmp dword ptr 内存单元地址(段间转移)
    内存单元地址处开始存放的是两个字,高地址处的字是转移的目的段地址,低地址处的字是转移的目的偏移地址

条件转移指令jcxz

所有的条件转移指令都是短转移,对应的机器码中包含的是转移的位移
格式:jcxz 标号
当(cx)=0时,跳转;当(cx)≠0时,不跳转,程序继续向下执行。该指令不改变CX。

循环指令loop

所有的循环指令都是短转移,对应的机器码中包含的是转移的位移
格式:loop 标号
(1)(cx)=(cx)-1;(2)如果(cx)≠0,跳转;如果(cx)=0,不跳转,程序继续向下执行。

小技巧

掌握了以上的知识就可以灵活编写很多功能复杂的小程序了,提示:运用到以上的转移指令可以用来编程一个可以修改原来程序并再执行的程序哦!试着自己动脑尝试下,后面我会展示的。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
CASL引入国内以后作为中国计算机软件专业技术资格和水平考试高级程序员级考试内容之一。使用虚拟的计算机目的为的是一个公平的考试环境,毕竟如果让每天和MC680X0打交道的朋友去和写PC驱动的朋友一起考i80X86汇编显然是不公平的。 CASL达到这一目的的同时却带来了一个麻烦:CASL程序无法在常见的PC或者其他任何计算机上运行。 我们有三条常见选择: 1)汇编器,将Casl汇编程序汇编成诸如80X86指令的程序,在PC上运行 2)解释器,解释执行每一条指令,有点像解释型高级语言,但是来的简单一些 3)忘记CASL,忘记高程考试 ;;;;-) 在选择了第二种方案以后我们开始了这个软件...... Nasl的设计主要目标便是简单易用,事实上在我能找到的所有CASL解释器中没有一个能很快上手运行起来的,当然这不包括Nasl本身。由于Comet是一个虚拟计算机,诸如复旦大学计算机科学系所设计的CASL汇编器的设计只能给使用者带来不必要的麻烦。鉴于它只能在Pure DOS下运行,Nasl诞生了,编写一个开放的人人可以得到的方便的CASL解释器是编写Nasl的初衷之一。 Nasl能对输入的CASL汇编程序解释运行,以此可以观察各个寄存器以及内存的变化情况,使得您可以熟悉CASL汇编并对汇编语言程序设计的思想有所了解,帮助通过高程考试。Nasl支持CASL汇编文件的编辑,但是请不要将它视作一个";;;开发环境";;;,CASL和Nasl都不值得您去那么做。 最后祝所有努力学习的朋友好运!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值