chapter4-1-280868088汇编语言程序设计.pptVIP

  • 6
  • 0
  • 约2.65万字
  • 约 97页
  • 2018-03-09 发布于河南
  • 举报
chapter4-1-280868088汇编语言程序设计

三、伪指令语句 1. 数据定义伪指令 常用的数据定义伪指令: DB 常用的数据定义伪指令: DW 常用的数据定义伪指令: DD 2. 符号定义伪指令 ① 赋值伪指令:EQU ② 等号伪指令:= ③ 类型定义伪指令:LABEL 3. 段定义伪指令 4. 过程定义伪指令 过程定义伪指令的格式: 过程名 PROC [类型]    ……  ;指令序列(过程的内容) RET ;过程返回 过程名  ENDP 过程名是用户自定义的标识符,可作为调用此过程的指令中的操作数。 类型可选为NEAR或FAR,如果省略类型,则系统取NEAR类型。 PROC 和 ENDP 必须成对出现。 过程中可包含 1 条至多条返回指令RET,当过程运行到某种条件满足时返回至主程序,从调用指令的下一条指令继续执行。 调用“过程” 的格式: CALL 过程名 对于近过程,调用和返回时只有CALL的下一条指令的偏移地址(IP)进栈和出栈: 调用: SP ← SP-2,[SS×16+SP] ← IP 返回: IP ← [SS×16+SP] ,SP ← SP+2 对于远过程,调用和返回时CALL的下一条指令的段地址(CS)与偏移地址(IP)将先后进栈和出栈: 调用: SP←SP-2,[SS×16+SP] ←CS SP←SP-2,[SS×16+SP] ←IP 返回: IP ← [SS×16+SP] , SP ← SP+2 CS ← [SS×16+SP] , SP ← SP+2 【例】 SEGX SEGMENT SUBT PROC FAR RET SUBT ENDP CALL FAR PTR SUBT SEGX ENDS SEGY SEGMENT CALL FAR PTR SUBT SEGY ENDS … … … … … … 【说明】: 过程SUBT 位于SEGX段内,它有两次被调用:一处是在SEGX段的段内调用,另一处是在SEGY段的段间调用。 为实现段间调用,过程SUBT 必须定义为FAR属性。 在调用过程SUBT时,无论是段内调用还是段间调用都必须使用指令:CALL FAR PTR SUBT * * * * 举例:字符串的定义 S1 DB ‘ABCDEF’ S2 DB ‘A’, ‘B’, ‘C’, ‘D’, ‘E’, ‘F’ S3 DW ‘AB’, ‘CD’, ‘EF’ S4 DD ‘AB’, ‘CD’, ‘EF’ 41H 42H 43H 44H 45H 46H S1 41H 42H 43H 44H 45H 46H S2 42H 41H 44H 43H 46H 45H S3 00H 00H 46H 45H 00H 00H S4 42H 41H 00H 00H 44H 43H 例: DSEG SEGMENT TABLE1 DW 12 DW 34 DATA1 DB 5 TABLE2 DW 67 DW 89 DW 1011 DATA2 DB 12 RATES DW 1314 OTHRAT DD 1718 DSEG ENDS TABLE1 0CH 00H 22H 00H 05H 43H 00H 59H 00H F3H 03H 0CH 22H 05H B6H 06H 00H 00H 共18个字节 12D 34D 05D 67D 89D 1011D 1314D 12D 1718D DATA1 TABLE2 DATA2 OTHRAT RATES 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 说 明: 当一个变量用DB、DW、DD定义时,变量名出现在伪指令DB、DW、DD的左边,伪指令便给出了该变量的类型属性,变量在汇编时的偏移量(偏移值属性)等于段首址到该变量的字节数,其段地址分量(段属性)为当前段首址的高16位。 若某个变量所表示的是一个数组(向量),则其类型属性为变量的单个元素所占用的字节数。 0 4 5 11 12 14 DSEG DSEG DSEG DSEG DSEG DSEG 2 1 2

文档评论(0)

1亿VIP精品文档

相关文档