• 忘掉天地
  • 仿佛也想不起自己
bingliaolongBingliaolong  2021-03-29 13:55 Aet 隐藏边栏 |   抢沙发  6 
文章评分 3 次,平均分 5.0

汇编

关于程序的介绍部分。

程序

过程

  1. 编写汇编程序
  2. 用汇编语言编译程序对源程序进行编译
    1. 产生目标文件
  3. 再用链接程序对目标文件进行链接
    1. 产生可执行文件
  4. 执行可执行文件

可执行文件

  1. 程序
    1. 源程序中的汇编指令翻译过来的机器码
    2. 源程序中定义的数据
  2. 相关的描述信息

源程序

伪指令

  1. 汇编语言源程序中,包含两种指令
    1. 汇编指令:对应的机器码的指令,可以被编译为机器指令,最终被CPU执行
    2. 伪指令:没有对应的机器指令,最终不被CPU执行

  1. segment ...ends是一对成对使用的伪指令
    1. 功能是定义一个段
    2. 上述assume是一个段名
    3. 一个汇编程序是由多个段组成的,这些段被用来存放代码、数据或当前栈空间来使用
    4. 一个有意义的汇编程序至少要有一个段,这个段用来存放代码
    5. ends是一个段的结束标记,而end是一个汇编程序的结束标记
  2. assume的含义是“假设”
    1. 它假设某一段寄存器和程序中的某一个用segment ... ends定义的段相关联

源程序中的程序

  1. 源程序中的程序指的是最终由计算机执行、处理的指令或数据

标号

  1. 上述的codesg就是标号
  2. 一个标号指代了一个地址
  3. codesg作为一个段的名称,最终会被编译、链接程序处理为一个段的地址

程序的结构

  1. 源程序是由一些段构成的
  2. 首先,定义一个段

  1. 在段中写入汇编指令

  1. 有必要指出程序在何处结束

  1. aet是被当作段来使用,如果有需要,可以将aet与cs段寄存器关联起来

程序返回

  1. 在程序末尾加上下述两句汇编指令,就可以实现程序返回
  2. 它由CPU执行

[BX]和LOOP

[bx]

  1. [bx]和[0]类似,[0]标识内存单元,偏移地址是0,段地址默认在ds中
  2. [bx]同样表示一个内存单元,段地址在ds中,偏移地址在bx中

loop

  1. 格式:loop 标号
  2. CPU执行loop指令的时候,要进行两步操作
    1. (cx) =(cx)-1
    2. 判断cx中的值,不为0则转至标号处执行程序
  3. 通常,用loop指令来实现循环功能
  4. cx中存放着循环次数

段前缀

  1. mov ax,ds:[bx]
    1. 将一个内存单元的内容送入ax,这个内存单元的长度为2个字节,存放一个字,偏移地址在bx中,短地址在ds中
  2. mov ax,cs:[bx]
  3. mov ax,ss:[bx]
  4. mov ax,es:[bx]
  5. mov ax,ss:[0]
  6. mov ax,cs:[0]

代码段中使用数据

  1. dw的含义是定义字型数据(define word)
  2. 这里dw定义了8个字型数据,它们占用了16个字节的空间
  3. 程序的指令对这8个数据进行累加,由于它们在代码段中,程序在运行的时候cs中存放了代码段的段地址,所以可以从cs中得到它们的段地址
  4. 因为用dw定义的数据处于代码段的最开始,所以偏移地址为0
  5. 这8个数据的偏移地址为:0,2,4,6,8,A,C,E

代码段中使用栈

  1. 可以用dw定义多个字型数据,在程序加载后,将取得多个字的内存空间
  2. 而这段空间,可以当作栈来使用

不同的段

本文为原创文章,版权归所有,欢迎分享本文,转载请保留出处!

bingliaolong
Bingliaolong 关注:0    粉丝:0 最后编辑于:2021-11-20
Everything will be better.

发表评论

表情 格式 链接 私密 签到
扫一扫二维码分享