![]() |
中国DOS联盟-- 联合DOS 推动DOS 发展DOS --联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum |
| 游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟 |
|
中国DOS联盟论坛 现在时间是 2026-09-15 00:40 |
共 47,812 主题排行 / 349,917 发帖 / 今日 0 篇 / 48,268 会员排行 |
| DOS开发编程 & 发展交流 (开发室) » 汇编语言编译器使用5 |
| 可打印版本 2,136 / 4 |
| 第1楼 chrise | 发表于 2010-04-11 21:57 |
| 初级用户 发帖 32 积分 88 | |
|
汇编语言编译器使用5 题目是 从键盘输入二位非压缩的BCD数,存入AX中中,并将其转化为二进制数,且显示出来
NAME EX_05_18 STACKS SEGMENT DB 100 DUP(0) STACKS ENDS CSAG SEGMENT ASSUME CS:CSAG,SS:STACKS MAIN PROC FAR START:PUSH DS MOV AX,0 PUSH AX REV:MOV AH,1 INT 21H MOV BL,AL INT 21H MOV AH,AL MOV AL,BL CMP AX,3030H;判AX中是否为'00' JE ENDTRAN CALL NEAR PTR TRAN CALL FAR PTR CON MOV AL,0DH;? CALL FAR PTR DISP MOV AL,0AH;? CALL FAR PTR DISP JMP REV ENDTRAN:RET MAIN ENDP TRAN PROC NEAR AND AX,0F0FH MOV BL,AL MOV CL,3 SHL AL,CL MOV CL,1 SHL BL,CL ADD AL,BL ADD AL,AH;将两位BCD数转为二进制数 RET TRAN ENDP CSAG ENDS CSBG SEGMENT PARA'CODE' ASSUME CS:CSBG CON PROC FAR PUSH AX MOV CL,4 SHR AL,CL ADD AL,30H CMP AL,39H JBE CON2 ADD AL,07H CON2:PUSH AX MOV AL,0DH CALL FAR PTR DISP MOV AL,0AH CALL FAR PTR DISP POP AX CALL FAR PTR DISP;显示高位十六进制数 POP AX AND AL,0FH ADD AL,30H CMP AL,39H JBE CON1 ADD AL,07H CON1:CALL FAR PTR DISP RET CON ENDP DISP PROC PAR MOV DL,AL MOV AL,02H INT 21H RET DISP ENDP MOV AH,4CH INT 21H CSBG ENDS END START 麻烦指教一下,有以下问题 (1)判断输入的是不是00,为什么是CMP AX,3030H,为什么跟3030比较? (2)上次请教过MOV DL,0DH MOV AH,02H INT21H 是换行功能。MOV DL,0AH MOV AL,02H INT 21H 是什么功能? (3)子程序 TRAN 是将ASSCII码转换为二进制数的功能,帮忙看一下算法有没有问题? (4)编译后有错误:ADD AL,AH DISP PROC FAR 谢了 [ Last edited by chrise on 2010-4-11 at 22:34 ] |
|
| 第2楼 本是 | 发表于 2010-04-12 11:38 |
| 银牌会员 发帖 790 积分 2,227 | |
|
MOV AH,4CH
INT 21H 此程序段不起作用!即没有被执行。 "ADD AL,AH;将两位BCD数转为二进制数"改;为; ——即全角字符改半角! "DISP PROC PAR MOV DL,AL"断作两行并改PAR为FAR如 DISP PROC FAR MOV DL,AL (1)因为字符“0”的16进制码值为30h (2)MOV DL,0AH MOV AL,02H INT 21H 是什么功能? 首先要改正mov al,02h为mov AH,02h,再说功能是它是回车 兄弟,你的输入出错太多,会浪费很多时间的,一定要看着书上的内容仔细核对源程序,特别要注意分清数字与字符(如0与o或O、1与l、6与b、9与q)、全角与半角(如;与;、,与,、“”与""、‘’与'')、保留字-自定义字-未定义字(FAR-PAR)的差别,尤其不要输错寄存器,如果是VGA显示器编程,有可能会烧掉显示器硬件的! [ Last edited by 本是 on 2010-4-12 at 11:40 ] |
|
| 第3楼 chrise | 发表于 2010-04-12 20:39 |
| 初级用户 发帖 32 积分 88 | |
|
再请教一下 什么是十六进制码啊?有键盘输入的数字都是十六进制码吗?
|
|
| 第4楼 chrise | 发表于 2010-04-12 21:32 |
| 初级用户 发帖 32 积分 88 | |
|
stack 段 STACK段有一句
DB 100 DUP (0) 100指的是什么 堆栈操作不是字操作吗?这句活有什么作用?谢谢 |
|
| 第5楼 070 | 发表于 2010-04-12 22:33 |
| 高级用户 发帖 218 积分 663 来自 福建 | |
Originally posted by chrise at 2010-4-12 20:39: 十六进制解释 http://baike.baidu.com/view/230306.html?wtp=tt 在汇编里,数字末尾带H或h的 是十六进制码。 ------------------------善用搜索引擎解决明确具体的问题。 Originally posted by chrise at 2010-4-12 21:32: 堆栈也是可以字节操作的 DB是定义字节单元 DUP是重复初值 100 是次数 后面(0)为赋值的初值 指令的作用是,在堆栈中申请100个字节的空间,每个字节赋值为0 作用就叫本是来回答吧,哈。我不会 |
|
|
[ 联系联盟系统管理团队 -
中国DOS联盟 -
标准版 ] Sponsored by ifanr Inc | © 2001–2023 |