目录 上一页 下一页 下一章

第4章 奇妙的声音 -65-

main
code

endp
ends
end


main
  程序并不复杂,先显示一个字符串,再分别显示"回车"和"换行",注意"回车"和"换行"是以"字"的形式定义在内存中的。那么程序又是如何应用这一个字的数据呢?
  指令"MOV DL,CRLF"和"MOV DL,CRLF+1"清楚地反映了程序的意图:为适应DOS的要求,我们只能将这个"字"拆成"字节",每次取出八位数据。从表面上看程序并没有错误,但实际上这样的程序无法编译,下面是我用TASM编译这个程序时出现的错误:
  C:\ASM\>TASM TEMP[Enter]
  Turbo Assembler Version 3.2 Copyright (c) 1988, 1992 Borland International

  Assembling file: temp.ASM
  **Error** temp.ASM(13) Operand types do not match
  **Error** temp.ASM(15) Operand types do not match
  Error messages: 2
  Warning messages: None
  Passes: 1
  Remaining memory: 459k
  给出的错误信息告诉我们"运算类型不等"。看来实际情况并非如想象中那样,编译程序比我们人类要"呆"得多。如何使程序正确编译呢?
  一种方法,改用DB伪指令定义数据。将第七行改写成"CRLF DB 0DH,0AH";另一种方法就是用"PTR"操作符。

PTR
这个操作符用于显式地指示操作数的类型,它的使用很简单:"type PTR 目的地址"

code


main

msg
crlf
start:





segment
assume
org
proc
jmp
db
dw
mov
mov
int
mov
mov
int

cs:code
100h
far
short start
'Hello,World!',24h
0d0ah
ah,9
dx,offset msg
21h
ah,2
dl,byte ptr crlf
21h

Copyright © 2004-2015 Reanimator www.cookmoon.org

目录 上一页 下一页 下一章