HELLOWORLD汇编级别学习小结

今天开始看汇编了,回家就编了个helloworld级汇编程序,没想到错误百出,不过经过一番调试后,感觉到了很多!

下面结合程序源代码来分析一下,免得再犯同样的错误!

 

先看代码:

 


data segment ;数据段定义
 msg db  0dh,0ah,'hello$' ;0dh,0ah代表回车换行 字符串末尾要加$号表示字符串结尾了
data ends


stack segment ;堆栈段定义

stack ends

 

codes segment ;代码段定义
main proc far ;注意,这里用far而不用near是有学问的,在下面会有详细解释
 assume cs:codes,ds:data,ss:stack
start:

 ;下面三行是为了程序返回而设立的

 push ds     ;保存已存在的数据段
 sub ax,ax       ;将ax寄存器置0
 push ax     ;将ax入栈

 

;将ds设为当前数据段
 mov ax,data
 mov ds,ax

 

;下面两行的结果是一样的,可以互换,表示将字符串的起始地址放入dx寄存器
 ;lea dx,msg ;注意这里没有offset
 mov dx,offset msg

 

;这里是dos第21号功能调用,输出字符串
 mov ah,09h
 int 21h

 

;这里是dos第21号功能调用,输入一个字符,将ASCII码存入al

 mov ah,0ah
 int 21h

;返回dos
 ret
main endp
codes ends
 end start

 

下面回答那个关于near和far的问题:

据记载:

far和near是子程序调用时的参数
如果子程序和调用程序在一个段内,子程序参数设置为near
如果子程序和调用程序不在一个段内,子程序参数设置为far
这里主程序定义为far是因为:
系统把主程序当作DOS调用的一个子程序
DOS内核与主程序不是在同一个段地址内
所以主程序参数要用far

 

调试期间遇到了这么一个问题:会跳出一个错误窗口: 说ntvdm cpu遇到一个硬件错误,不知道啥意思

 

 

感谢大家批评指正哈!部分内容来自互联网,《IBM-PC汇编语言程序设计(第二版)》

转载请注明出处!谢谢!

posted @ 2008-07-28 21:55 楚暮四 阅读(89) 评论(0)  编辑 收藏 网摘 所属分类: 汇编

标题  
姓名  
主页
Email (博主才能看到) 
验证码 *  看不清,换一张 [登录][注册]
内容(请不要发表任何与政治相关的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
该文被作者在 2008-07-28 22:01 编辑过
Google站内搜索

相关文章:

相关链接:

历史上的今天:
2007-07-28 (转帖)sql查询速度的影响要素