本次笔记内容:
15.程序格式与伪操作-2
16.上机过程-1(前15分钟)

注:我找到了对应内容的课件,请见我于GitHub的CS笔记仓库。因此,为了节省时间,我只记录老师上课强调的内容与对应ppt页码。

本节课对应幻灯片:汇编语言程序设计-程序格式,第15页起。

文章目录

  • P15 简化段定义
  • P16 编译器的预定义
  • P18 段组定义伪操作
  • P21 程序开始和结束伪操作
  • P22 数据定义及存储器分配伪操作
  • P23 数据定义及存储器分配伪操作 - 例2
  • P24 定义变量名字
  • P25 再谈 LABEL 伪操作
  • P26 表达式赋值伪操作
  • P27 地址计数器
  • P28 对准伪操作 ORG
  • P29 EVEN 使下一地址从偶地址开始
  • P30 基数控制伪操作 RADIX
  • P31 汇编语言程序格式
  • P32 表达式操作符 - 算术操作符
  • P33 表达式操作符 - 算逻辑和移位操作符
  • P34 表达式操作符 - 关系操作符
  • P35 表达式操作符 - 数值回送操作符
  • P36 例子
  • P37 表达式操作符 - 属性操作符

P15 简化段定义

没有 SEGMENT 等,一个段的开始代表上衣段的结束。

P16 编译器的预定义

编译器预定义了一些段名,如@data等。并且,常量表数据段在 link 后组成了段组,为DGROUP

.startup 下的代码中,做了什么?

  • 前两行,代码段在 1A09 ,DS即将要被改成 1A0B ;1A0B在下,说明了先放代码,再放数据
  • 做简化段时,代码在上面,别看我们在之前声明了数据这与完整段定义不同。
  • 后面,第三行,将 SS(1A09) 赋值给 BX(1A0B),1A09 - 1A0B = -2 (FFFE);
  • 之后 BX 逻辑左移4位;成为 FFE0 。
  • 之后,调整 SS 与 SP 的值。

P18 段组定义伪操作

在代码中,将 ds 与段组名联系起来,以后的操作可以更简洁些。

P21 程序开始和结束伪操作

TITLE 与 NAME 实际用处不大(在生成列表文件时打印表头)。

程序找 [label] ,从这里开始执行。

P22 数据定义及存储器分配伪操作

[变量] 助记符 操作数 [ , 操作数 , … ] [ ; 注释 ]
助记符:DB DW DD DF DQ DT

注意到变量名是可写可不写的。

所谓“助记符”,就是声明是一个字节、一个字还是双子的大小,这就是“位初始化”

如上,是一个小端模式的存储器分配。比如:

  • -5 是 FFFB
  • 所以先放 FB ,后放 FF

P23 数据定义及存储器分配伪操作 - 例2

一个字符放在一个字节里。

注意到:

  • A的ASC码是41,B是42;
  • 使用DB存时,是41H 42H
  • 但是使用DW存时,就是42H 41H了,如何理解?

因为DW声明的是一个完整的字,因此A放在字中的高位,B放在低位。

PAR1的例子中,我们建了一个内存表叫做ADDR_TABLE。内存里不仅能放数,也能放数据的地址。

对于 VAR DB 100 DUP (?) ,表示重复进行:

  • 如果是 VAR DB 100 DUP 1,表示内存中有 100 个 1 ,每个是一个字节;
  • ? 表示未初始化。

DUP 可以嵌套,如 DB 2 DUP (0, 2 DUP(1,2), 3) ,从最里面的开始括号开始推。

P24 定义变量名字

如上图,定义了不同的变量名与类型。

但是有时搞错了类型容易出错。

如上图,有可能造成类型不匹配(使用了寄存器的类型与字节、字不匹配)。

但是可以进行 WORD PTR 等进行强制类型转换。

P25 再谈 LABEL 伪操作

LABEL 能标识一个变量名是什么类型的。

但是其并不分配内存空间。

BYTE_ARRAY 是一个字节类型的变量名字;声明之后,为 WORD_ARRAY 分配了一个 50 个字的空间;接下来,为 tos 规定了一个字类型。

LABEL 指向了即将分配内存的地址。对于100个字节分配完毕后,tos即指向0064。

P26 表达式赋值伪操作

与数据定义不同的是,其不分配内存;其公式记录在汇编工具的表格中。

P27 地址计数器

地址计数器,记着每条指令开始的IP;当前正在汇编的指令的地址用 $ 表示。

注意到上图中,红色与绿色的内容是不同的:

  • 红色的,是 0078 (当前地址) + 4 = 007C ;
  • 绿色的,是 007E (当前地址) + 4 = 0082 。

P28 对准伪操作 ORG

ORG 实际上就是设置 地址计数器的值

如上,就是空 10 个字节,再放 VAR1 。

对于下两种代码,是等价的:

BUFFER LABEL BYTEORG   $+8
# 等价于
BUFFER DB 8 DUP (?)

P29 EVEN 使下一地址从偶地址开始

计算机是偶地址访问,因此,需要有这么一个命令,保证起始地址都是偶数。

EVEN 命令与 ALIGN 2 等价。

P30 基数控制伪操作 RADIX

使用 .RADIX 16 ,规定了都是 16 进制;否则,需要以 0FFH 表示是 16 进制 的 0FF ;如果默认为 16 进制,则需要使用 178D 表示 178 是 10 进制的。

P31 汇编语言程序格式

此其实为下一节课(下一集视频的内容)。

P32 表达式操作符 - 算术操作符

对于绿色部分,即为求数组长度,并且赋给 CX 。

对于地址来讲,加减常数是有意义的,乘除意义不明确;寄存器 BX 来讲,进行 + 1 是无意义的。

P33 表达式操作符 - 算逻辑和移位操作符

对于 输入指令 IN 与 输出指令 OUT 那部分:

  • 输入进来,再输出出去;
  • 使用了 AND 0FEH ,说明如果是偶数,则输出其本身,否则输出时要进行处理。

P34 表达式操作符 - 关系操作符

对于 MOV FID, (OFFSET Y - OFFSET X) LE 128 ,可以判断其时进跳转,还是短跳转。

P35 表达式操作符 - 数值回送操作符

P36 例子

TYPE ARRAY ,由于 ARRAYTYPEWORD ,因此将 2 赋给 SI

注意 length 与 size 的区别。SIZE对于DB来讲,是指“以DB为单元分配了多少空间”(?)。在高版本中,使用的是sizeof与lengthof。

P37 表达式操作符 - 属性操作符

此外,还有 LOW , HIGH 操作符等。操作符在汇编程序汇编是就已经算出结果了。

【汇编语言与计算机系统结构笔记12】序格式与伪操作:简化段的定义、操作符等相关推荐

  1. 【汇编语言与计算机系统结构笔记11】程序格式与伪操作:段定义、堆栈 #简洁笔记形式

    本次笔记内容: 14.程序格式与伪操作-1 注:本节课更换为一名女老师.我找到了对应内容的课件,请见我于GitHub的CS笔记仓库.因此,为了节省时间,我只记录老师上课强调的内容与对应ppt页码. 注 ...

  2. 【汇编语言与计算机系统结构笔记01】x86/MIPS/ARM指令集概述与特性,一篇HPCA引发的思考(商业生态的决定性作用)

    资源Bilibili AV46914471 + AV57921488 汇编语言与计算机系统结构 清华大学 张悠慧 本次笔记内容: 01.汇编语言与计算机系统结构 02.汇编基础知识--指令集综述 文章 ...

  3. 【汇编语言与计算机系统结构笔记13】简单的上机过程示例

    本次笔记内容: 16.上机过程-1(第16分钟开始) 17.上级过程-2 注:我找到了对应内容的课件,请见我于GitHub的CS笔记仓库.因此,为了节省时间,我只记录老师上课强调的内容与对应ppt页码 ...

  4. 【汇编语言与计算机系统结构笔记06】地址计算指令,lea / leal,x86-32与x86-64下的swap对比,汇编的格式对比(Intel/Microsoft Differs from GAS)

    本次笔记内容: 07.寻址模式与数据传输指令等-2 文章目录 变址寻址 寻址模式实例 总结mov指令 地址计算指令 lea 整数计算指令 将leal指令用于计算 实例1 实例2 x86-32与x86- ...

  5. 【汇编语言与计算机系统结构笔记05】汇编的系统结构,从C代码生产汇编代码,一个具体的、经典的数据传送指令(mov)实例与分析

    本次笔记内容: 06.寻址模式与数据传输指令等 文章目录 汇编程序员眼中的系统结构 如何从C代码生产汇编代码 如何装gcc? 汇编语言数据格式 第一条汇编指令实例 数据传送指令(mov) 语法与操作数 ...

  6. 【汇编语言与计算机系统结构笔记03】浮点数的计算机表示,IEEE 754,舍入(rounding),C语言中的浮点数

    本次笔记内容: 04.浮点数的计算机表示 文章目录 IEEE的浮点数标准 IEEE的754标准 浮点数示例 计算机中浮点数二进制表示 浮点数的类型 规格化浮点数(Normalized) 规格化浮点数示 ...

  7. 【汇编语言与计算机系统结构笔记02】整数的计算机表示与运算,C中的无符号字符(unsigned)和带符号字符(signed),补码,一些例题

    本次笔记内容: 03.整数的计算机表示与运算 文章目录 预备知识 数制 数的机器表示 机器字在内存中的组织 字节序(Byte Ordering) 整数表示 计算机中整数的二进制编码方式 无符号数与带符 ...

  8. 【汇编语言与计算机系统结构笔记18】MIPS指令集与汇编程序设计 异常处理

    本次笔记内容: 28.MIPS指令集与汇编程序设计-2 补充:MIPS32异常处理 注:我找到了对应内容的课件,请见我于GitHub的CS笔记仓库. 本节课对应幻灯片:汇编语言程式设计-MIPS.pd ...

  9. 【汇编语言与计算机系统结构笔记17】MIPS 汇编初步

    本次笔记内容: 25.MIPS汇编初步-1 26.MIPS汇编初步-2 27.MIPS指令集与汇编程序设计 注:我找到了对应内容的课件,请见我于GitHub的CS笔记仓库.因此,为了节省时间,我只记录 ...

最新文章

  1. UITableView 顶部空白总结
  2. Codeforces Round #503 (by SIS, Div. 1)D. the hat
  3. 【Oracle】PL/SQL Developer使用技巧(持续更新中)
  4. CSS鼠标响应事件经过、移动、点击示例介绍
  5. 关于C++子类父类成员函数的覆盖和隐藏
  6. java 计算工具类_java精确计算工具类
  7. PaperNotes(15)-图神经网络、PyG极简版入门笔记
  8. Python测试开发django1.简介
  9. Exchange2010应用地址列表
  10. js 正则表达式判断价格
  11. WSUS补丁服务器部署详细 利用WSUS部署更新程序
  12. c++编写手机小游戏代码_手机也能编程?盘点这6个可以用手机编程的App!快收藏!...
  13. 少儿编程 电子学会图形化编程等级考试Scratch三级真题解析(判断题)2022年6月
  14. Redis中SDS简单动态字符串
  15. 跨平台APP开发心路历程
  16. YOLO多线程多模型运行模式的实施
  17. python财务编程_Python笔记 财务小白的 day4 python编程基础(2)
  18. 封面空格处添加下划线
  19. java解压在线tgz文件
  20. target找不到*.xml和*.properties文件 报错:FileNotFoundException

热门文章

  1. 力扣题目——107. 二叉树的层序遍历 II
  2. java成员变量除了方法传递_JAVA类与对象(四)----成员变量与局部变量 、成员方法、构造方法...
  3. angularjs路由监听,uirouter感知路由变化,解决uirouter路由监听不生效的问题
  4. Visual Studio 重新生成解决方案 无反映
  5. nginx之206异常
  6. Nhibernate出现No row with the given identifier exists问题的产生原因及解决方法
  7. libc.so.6被删后导致系统无法使用的原因及解决方法
  8. 关于centos启动报错:Failed to start Crash recovery kernel arming的解决方案
  9. 【已解决】报异常:java.lang.ArithmeticException: / by zero
  10. oracle安装错误10301,Oracle数据库案例整理-Oracle系统运行时故障-表空间所在的目录没有可用空间导致收集统计信息失败...