微机接口第七讲补充资料与习题_第1页
微机接口第七讲补充资料与习题_第2页
微机接口第七讲补充资料与习题_第3页
微机接口第七讲补充资料与习题_第4页
微机接口第七讲补充资料与习题_第5页
已阅读5页,还剩26页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1汇编语言数据项 表达式 运算符 数据项包括常量 变量 标号及表达式 下面分别加以介绍 1 常量 1 数字常量二进制常量 以B结尾 如10101011B十进制常量 以D结尾或省略 汇编语言中默认无标记数为十进制数 十六进制常量 以H结尾 如0A8C6H 汇编语言提供基数控制 RADIX伪指令可以改变默认进制 伪指令格式 RADIXn要求 n为2 16范围内任何数值 功能 把n表示的数值作为默认基数 例如指令 RADIX8 将缺省基数改为8这时 movah 9就不能写了 因为8进制数字的范围为0到7 但是 movah 7是可以的 系统把这个7看作8进制数字 如果用 radix8 再出现movah 9则出错 但是movah 9h是可以的 因为h说明9是16进制数了 2 字符串常量用单引号引起来的字符或字符串也代表常数 例 A BCDE 汇编时被翻译成对应的ASCII码41H和42H 43H 44H 45H 字符串最大长度为255个字符 3 符号常量利用一个标识符表达的一个数值 常数若使用有意义的符号名来表示 可以提高程序的可读性 同时更具有通用性 汇编语言提供等价机制 用来为常量定义符号名 符号定义伪指令有 EQU 和 后面会解释 2 变量变量是内存中的数据区 在程序中作为存储器操作数来使用 如 datasegmentm1db5hdataends变量有三种属性 1 段值 变量定义所在段的段地址 2 偏移量 变量单元地址与段起始地址之间的位移量 3 类型 有字节 字和双字三种 3 标号标号是某条指令所存放单元的符号地址 可作为转移指令或CALL指令的转移地址 在学习子程序时会介绍 标号也有三种属性 段值总是在CS段寄存器中 偏移量概念与变量的偏移量相同 类型分NEAR和FAR两种 NEAR 表示标号所在语句与转移指令或调用指令在同一码段内 只需改变IP即可 对于初学者来说 NEAR比较常用 FAR 标号所在语句与转移指令或调用指令不在同一代码段内 若没有对类型进行说明 默认为NEAR 4 表达式表达式是常量 寄存器 标号 变量与一些运算符组合的序列 分数字表达式和地址表达式两种 汇编时按一定的优先规则对表达式进行计算后可得到一个数值或一个地址 下面介绍五种运算符 1 算术运算符 2 逻辑运算符 3 关系运算符 4 分析运算符 5 合成运算符 6 其它运算符 注意 这里的表达式是常量表达式 movax 3 5是对的movax bx cx是错的 移位运算符 关系运算符 高低运算符考试不作要求 运算符的优先级 考试不做要求 1 算术运算符有 以及MOD 其中MOD表示除法运算后得到的余数 例 19 7的商是2 19MOD7则为5 余数 算术运算符可以用于数字表达式 例 MOVAL 2 7汇编后为B0 0E算术运算符也可以用于地址表达式 对地址运算的结果应有明确的物理意义 例两个地址的乘或除无意义 而加或减则可以 例 LEASI SUM 3表示变量SUM的地址加上3得到的和作为新存储器地址 2 逻辑运算符逻辑运算符有AND OR XOR和NOT 它们只能用于数字表达式中 例 MOVCL 36HAND0FH经汇编后 MOVCL 06H8086的指令中也有ANDORXORNOT指令 指令和逻辑运算符的区别 逻辑运算符在汇编时进行 而指令在程序执行时进行的 例 ANDDX 81HAND0FEH这里逻辑运算符AND在汇编时进行 汇编后表达式81HAND0FEH的值为80H 执行前一个AND指令时 将 DX 与立即数80H相与 结果在DX中 3 关系运算符共有6个 它们为 EQ 相等 NE 不等 LT 小于 GT 大于 LE 小于或等于 GE 大于或等于 关系运算符的两个操作数必须都是数字或者是同一段内的两个存储器地址 关系为真 结果为0FFFFH关系为假 结果为0例 MOVBX PORT VALGE5若PORT VAL的值大于等于5 则汇编后为 MOVBX 0FFFFH若PORT VAL的值小于5 则汇编后为 MOVBX 0 4 分析运算符它们可以把存储器一些特征作为数值送回 这些操作符有OFFSET SEG TYPE SIZE及LENGTH OFFSET运算符可以得到一个标号或变量的偏移地址例 MOVSI OFFSETSTRI1 代表将变量STRI1处的地址偏移量取到SI中 注意与MOVSI STRI1的差别 但MOVSI OFFSETSTRI1与LEASI STRI1类似 SEG运算符用来取存储单元的段值 datasegmentaadb 1 dataendscodesegmentassumecs code ds datastart1 movax data 等价于movax segaamovds ax datasegmentm1dw5a6chm2db34hm3db56hdataendscodesegmentassumecs code ds datastart movax datamovds axmovax 1234hmovax segm1 这句的效果同movax datamovds ax movds axleasi m2movbx offsetm2 这句的效果同leabx m2movah 4chint21hcodeendslec10 2 asm TYPE运算符用来取存储器的单元类型 各单元类型对应值如下 同时注意学习书本127页表4 3及相关的例子存储器单元类型对应值DB 字节 1DW 字 2DD 双字 4NEAR 1FAR 2若BUFFER1存储区是用如下伪指令定义的 BUFFER1DB100DUP 则TYPEBUFFER1等于1 注意p128页例4 5 LENGTH运算符用来计算一个存储区的单元 单元可以是字节 字或双字 的数目 注意 LENGTH返回的存储区必须用复制操作符DUP 来定义 否则返回值为1 例 若FEES被定义为 FEESDW4 5 6则MOVCX LENGTHFEES汇编后 MOVCX 1 SIZE运算符用来计算一个存储区的字节总数 例 若BUFFER2存储区是用如下伪指令定义的 BUFFER2DW200DUP 0 则 TYPEBUFFER2等于2LENGTHBUFFER2等于200SIZEBUFFER2等于400 5 合成运算符用来建立或临时改变变量或标号的类型或存储器操作的存储单元类型 包括 PTR THIS SHORT PTR运算符用来指定或修改存储器操作数的类型 通常和伪指令BYTE WORD等连起来使用 例 MOVBYTEPTR DI 0MOVWORDPTR DI 0 例 STRI1DW 定义为字类型可用如下语句 PPEQUBYTEPTRSTRI1QQEQUBYTEPTRSTRI1 1通过PP QQ把STRI1和STRI1 1又规定为字节类型 MOVSTRI1 AX是合法的MOVAL STRI1是非法的只能用 MOVAL PP或MOVAL BYTEPTRSTRI1 THIS运算符可以指定存储器操作数的类型 使用THIS运算符可以使标号或变量具有灵活性 例 AREAWEQUTHISWORDAREABDB1 2 3 4 5 6EQUTHIS又等同于LABEL因此 上面这两句话又可以写为AREAWLABELWORDAREABDB1 2 3 4 5 6这里AREAW为字类型而AREAB为字节类型 此时 AREAW的偏移地址和AREAB的偏移地址相同 但AREAW是字 WORD 类型 而AREAB是字节 BYTE 类型 datasegmentAREAWEQUTHISWORDAREABDB1 2 3 4 5 6dataendscodesegmentassumecs code ds datastart movax datamovds axmovax 0moval areabmovax 0movax areaw movax wordptrareabmovah 4chint21hcodeendsendstart lec10 3 asm datasegmentareawequalthiswordareabdb1 2 3 4 5 6dataendsmovax areaw ax 0201movbx areaw 2 bx 0403完整的程序位于lec10 1 asm SHORT运算符可以指定一个标号的类型为SHORT 短标号 即标号到引用该标号之间的距离在 127 127个字节范围内 短标号可以用于转移指令中 使用短标号的指令比使用近程标号的指令少一个字节 5 其它运算符1 方括号 指令中用方括号表示存储器操作数 方括号里的内容表示操作数的偏移地址 例如 MOVAX BX 将 BX 和 BX 1 指向的存储器两个单元的内容送AX2 段超越运算符 运算符 冒号 跟在某个段寄存器名 DS ES SS或CS 之后表示段超越 用来指定一个存储器操作数的段属性 而不管其原来隐含的段是什么 例如 M0VAX ES DI 把ES段中由DI指向的字操作数送 AX 伪指令语句 常用的伪指令有 数据定义伪指令符号定义伪指令段定义伪指令过程定义伪指令结束伪指令 数据定义伪指令 1 定义字节单元伪指令DB2 定义字单元伪指令DW3 定义双字单元伪指令DD 1 等价 EQU 伪指令伪指令格式 符号名EQU数值表达式符号名EQUDOSWRITECHAREQU2CALLDOSEQU注 1 仅在汇编源程序时作为替代符号用 不产生任何目标代码 也不占用存储单元 因此符号名没有段 偏移量和类型这3种属性 2 EQU定义伪指令同一符号名不能重复定义 必须取消 用PURG

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论