目录 上一页 下一页 下一章

-90- PC机汇编语言实战精解













hexout
code

mov
int
pop
pop
loop
mov
mov
int
mov
int
pop
ret
endp
ends
end
ah,2
21h
ax
cx
hexloop
dl,CR
ah,2
21h
dl,LF
21h
ax



main
;显示数字

;恢复AX寄存器
;恢复CX寄存器
;循环至HEXLOOP处理下个数位
;显示回车符


;显示换行符

;恢复AX寄存器
;返回主程序



  程序中DW伪指令的用法有些奇特,一般情况下我们常用DB、DW伪指令定义一些变量,这些变量往往有初值,所以在DB、DW后面总要跟一些字符串或数字。如果所定义的变量无初值,则我们就可以用"DW ?"这样的用法,"?"表示留出相应的存储空间,但不存入数据。不过请不要被"不存入数据"这句话误导,说是不存入数据,实际上这些存储空间将被初始化为"0","D# ?"和"D# 0"是完全一样的。这和我们从堆栈中动态分配到的存储空间不一样,当我们从堆栈中分配到自动变量空间后,我们有时要自己将其初始化为0,仔细研究一下CALC1.ASM不难发现这一点,然而用"D# ?"定义的变量就无需初始化。
  新出现的"DUP"(Duplication)是一个操作符:

DUP
  我们在第四章中谈到过一个分析运算符--OFFSET,用于取得某些变量的偏移地址。现在讨论的"DUP"操作符主要用于生成多个具有相同位宽的变量,用法很简单:

变量名 DB/DW 变量个数 DUP 数值1,数值2,...
   "变量个数"应是一个正整数,用来指定括号中的数据项重复次数,请看下例:
TEMP.ASM
data
var1
var2
var3
data
end

segment
db
db
db
ends



2 dup ('A')
2 dup ('A','B','C')
2 dup ('A',2 dup('B'),'C')




;定义'AA'
;定义'ABCABC'
;定义'ABBCABBC'



Copyright © 2004-2015 Reanimator www.cookmoon.org

目录 上一页 下一页 下一章