中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net  论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
作者:
标题: 汇编语言编译器使用4 上一主题 | 下一主题
chrise
初级用户





积分 88
发帖 32
注册 2010-3-27
状态 离线
『楼 主』:  汇编语言编译器使用4

程序代码如下:
DATAS SEGMENT
   stro db "input character'f'or's'!",'$'
   str1 db 'input character:$'
   str2 db 'the first subroutine!$'
   str3 db 'the second subroutine!$'
DATAS ENDS
code SEGMENT
    ASSUME cs:code,ds:DATAS
   
START:
main proc far
    MOV AX,DATAS
    MOV DS,AX
    mov dx,offset str1
    mov ah,09h
    int 21h
    mov ah,01h
    int 21h
    cmp al,'f'
    je subf
    cmp al,'s'
    je subs
    call enter
    lea dx,stro
    mov ah,09h
    int 21h
    jmp retn subf:call first
       jmp retn
subs:call second
retn:ret
  main endp
enter proc
    mov dl,0dh
    mov ah,02h
    int 21h
    mov dl,0ah
    mov ah,02h
    int 21h
    ret
enter endp
first proc
     call enter
     lea dx,str2
     mov ah,09h
     int 21h
     ret
first endp
second proc
call enter
lea dx,str2
mov ah,09h
int 21h
ret
second endp
code ends
END START
编译后如下syntax error:retn
syntex error:retn
syntax error:ret
我看不出是什么原因

2010-4-9 22:10
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
chrise
初级用户





积分 88
发帖 32
注册 2010-3-27
状态 离线
『第 2 楼』:  再加一下

enter proc
    mov dl,0dh
    mov ah,02h
    int 21h
    mov dl,0ah
    mov ah,02h
    int 21h
    ret
enter endp
这个程序段是什么作用,望指教一下

2010-4-9 22:53
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
070
高级用户

苏醒的沉睡者


积分 659
发帖 217
注册 2003-2-15
来自 福建
状态 离线
『第 3 楼』:  

印象中retn好象是保留字,不能作为 标识符啊。。。把所有retn替换成其他名称就好了。

涉及到int 的语句,是中断调用,有点类似调用windows API


    mov dl,0dh       ;根据中断的要求,设定要输出的字符,在本例,就表示换行符 ASCII码0dH = 换行符
    mov ah,02h      ;ah是功能号,02h代表写一个字符到标准输出
    int 21h            ;int调用中断, 21H 代表调用dos中断



好久没碰Dos,手都生了,赶紧回来练练.嘿嘿
2010-4-9 23:31
查看资料  发送邮件  发短消息 网志  OICQ (181315400)  编辑帖子  回复  引用回复
070
高级用户

苏醒的沉睡者


积分 659
发帖 217
注册 2003-2-15
来自 福建
状态 离线
『第 4 楼』:  

关于21H中断的具体列表,你可以查看这里,不过是英文的
http://spike.scu.edu.au/~barry/interrupts.html

chrise,你原先有没有学过其他计算机语言,学汇编主要是为了什么?



好久没碰Dos,手都生了,赶紧回来练练.嘿嘿
2010-4-9 23:34
查看资料  发送邮件  发短消息 网志  OICQ (181315400)  编辑帖子  回复  引用回复
chrise
初级用户





积分 88
发帖 32
注册 2010-3-27
状态 离线
『第 5 楼』:  回复上楼

我改了一下,好了,之前不知道是保留符。以前只是课上学过c 语言,其他的没看过。也是课上学过一段汇编,于是自己找了那本书好好看了一遍,但是没实际编过,现在就想编一下,多谢您指导啊,还望多多指教

2010-4-11 18:56
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
chrise
初级用户





积分 88
发帖 32
注册 2010-3-27
状态 离线
『第 6 楼』:  

mov dl,0ah
mov al,02h
int 21h
oah指什么?

2010-4-11 19:03
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
070
高级用户

苏醒的沉睡者


积分 659
发帖 217
注册 2003-2-15
来自 福建
状态 离线
『第 7 楼』:  

0AH是十六进制啊。。。

H是十六进制标志 0a = 十



好久没碰Dos,手都生了,赶紧回来练练.嘿嘿
2010-4-11 19:42
查看资料  发送邮件  发短消息 网志  OICQ (181315400)  编辑帖子  回复  引用回复
netwinxp
高级用户





积分 741
发帖 366
注册 2007-7-25
状态 离线
『第 8 楼』:  

把屏幕上的显示光标回车换行,防止后面的显示信息和前面的接在一起。

2010-7-6 19:33
查看资料  发短消息 网志   编辑帖子  回复  引用回复
kawaguchi
初级用户




积分 67
发帖 32
注册 2007-1-25
来自 日本の江户
状态 离线
『第 9 楼』:  



  Quote:
Originally posted by chrise at 2010-4-11 07:03 PM:
mov dl,0ah
mov al,02h
int 21h
oah指什么?

0ah是换行符的ASCII码~



打尽天下不平事,为抱国家尽我心!
2010-10-10 23:34
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: