![]() |
中国DOS联盟-- 联合DOS 推动DOS 发展DOS --联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum |
| 游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟 |
|
中国DOS联盟论坛 现在时间是 2026-09-14 23:11 |
共 47,812 主题排行 / 349,917 发帖 / 今日 0 篇 / 48,268 会员排行 |
| DOS开发编程 & 发展交流 (开发室) » 汇编语言编译器使用4 |
| 可打印版本 2,418 / 8 |
| 第1楼 chrise | 发表于 2010-04-09 22:10 |
| 初级用户 发帖 32 积分 88 | |
|
汇编语言编译器使用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我看不出是什么原因 |
|
| 第2楼 chrise | 发表于 2010-04-09 22:53 |
| 初级用户 发帖 32 积分 88 | |
|
再加一下 enter proc
mov dl,0dh mov ah,02h int 21h mov dl,0ah mov ah,02h int 21h ret enter endp 这个程序段是什么作用,望指教一下 |
|
| 第3楼 070 | 发表于 2010-04-09 23:31 |
| 高级用户 发帖 218 积分 663 来自 福建 | |
|
印象中retn好象是保留字,不能作为 标识符啊。。。把所有retn替换成其他名称就好了。
涉及到int 的语句,是中断调用,有点类似调用windows API mov dl,0dh ;根据中断的要求,设定要输出的字符,在本例,就表示换行符 ASCII码0dH = 换行符 mov ah,02h ;ah是功能号,02h代表写一个字符到标准输出 int 21h ;int调用中断, 21H 代表调用dos中断 |
|
| 第4楼 070 | 发表于 2010-04-09 23:34 |
| 高级用户 发帖 218 积分 663 来自 福建 | |
|
关于21H中断的具体列表,你可以查看这里,不过是英文的
http://spike.scu.edu.au/~barry/interrupts.html chrise,你原先有没有学过其他计算机语言,学汇编主要是为了什么? |
|
| 第5楼 chrise | 发表于 2010-04-11 18:56 |
| 初级用户 发帖 32 积分 88 | |
|
回复上楼 我改了一下,好了,之前不知道是保留符。以前只是课上学过c 语言,其他的没看过。也是课上学过一段汇编,于是自己找了那本书好好看了一遍,但是没实际编过,现在就想编一下,多谢您指导啊,还望多多指教
|
|
| 第6楼 chrise | 发表于 2010-04-11 19:03 |
| 初级用户 发帖 32 积分 88 | |
|
mov dl,0ah
mov al,02h int 21h oah指什么? |
|
| 第7楼 070 | 发表于 2010-04-11 19:42 |
| 高级用户 发帖 218 积分 663 来自 福建 | |
|
0AH是十六进制啊。。。
H是十六进制标志 0a = 十 |
|
| 第8楼 netwinxp | 发表于 2010-07-06 19:33 |
| 高级用户 发帖 366 积分 741 | |
|
把屏幕上的显示光标回车换行,防止后面的显示信息和前面的接在一起。
|
|
| 第9楼 kawaguchi | 发表于 2010-10-10 23:34 |
| 初级用户 发帖 32 积分 67 来自 日本の江户 | |
Originally posted by chrise at 2010-4-11 07:03 PM: 0ah是换行符的ASCII码~ |
|
|
[ 联系联盟系统管理团队 -
中国DOS联盟 -
标准版 ] Sponsored by ifanr Inc | © 2001–2023 |