![]() |
中国DOS联盟-- 联合DOS 推动DOS 发展DOS --联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum |
| 游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟 |
|
中国DOS联盟论坛 现在时间是 2026-09-15 01:34 |
共 47,812 主题排行 / 349,917 发帖 / 今日 0 篇 / 48,268 会员排行 |
| DOS开发编程 & 发展交流 (开发室) » 汇编语言编译器使用5 |
| 可打印版本 1,958 / 2 |
| 第1楼 chrise | 发表于 2010-04-11 21:52 |
| 初级用户 发帖 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:MOV AX,DATAS MOV DS,AX 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 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 PTR MOV DL,AL MOV 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码转换为二进制数的功能,帮忙看一下算法有没有问题? 谢了 |
|
| 第2楼 070 | 发表于 2010-04-12 08:13 |
| 高级用户 发帖 218 积分 663 来自 福建 | |
|
中断的功能你得看中断号,和输入参数。上次调用的是显示一个字符的中断,你输入一个换行符号,所以就变成换行的功能呢。不是那个中断就是用来换行的。
问题1,我也不知道,只能请教 本是 了。 问题2,你要了解到 AH 和 AL 的关系。 AH和 AL都是八位寄存器,共同组成了16位寄存器 AX 。AH=AX's High,AH的值是AX高八位的值,AL = AX's low,AL是AX 低八位的值。不过我认为AL应该是不能作为功能号的,有可能是印刷错误,应该把MOV AL,02H改为MOV AH,02H 问题3,不知道。请求教 本是。 |
|
| 第3楼 chrise | 发表于 2010-04-12 20:40 |
| 初级用户 发帖 32 积分 88 | |
|
好的 谢谢
|
|
|
[ 联系联盟系统管理团队 -
中国DOS联盟 -
标准版 ] Sponsored by ifanr Inc | © 2001–2023 |