| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2287 人关注过本帖
标题:[求解释]10进制输入16进制输出
只看楼主 加入收藏
cenriter
Rank: 1
等 级:新手上路
帖 子:16
专家分:0
注 册:2006-12-4
收藏
得分:0 

前面的:那不是输入AH吗?怎么又变成AL了呢?
后面的:转移倒是知道,但我不知道这段对整个程序来说有什么用处,为什么要和ODH比?

谢谢你的回答


2006-12-11 18:02
lefttime
Rank: 1
等 级:新手上路
帖 子:162
专家分:0
注 册:2006-10-6
收藏
得分:0 
输入的是AH,它代表的是中断号,是用于调用DOS中断,通过BIOS中断后开始等待用户输入数据,输入的数据存入AL中嘛

我是金子,我要闪光的
2006-12-11 18:18
cenriter
Rank: 1
等 级:新手上路
帖 子:16
专家分:0
注 册:2006-12-4
收藏
得分:0 

知道了

cmp al, 0dh
jz write ;
sub al, 30h
MOV cl, al
MOV ch, 0
MOV ax, bx
MOV bx, 0ah ;
mul bx
MOV bx, ax
add bx, cx
jmp input

write : MOV dl, 0dh
MOV ah, 02h
int 21h
MOV dl, 0ah
MOV ah, 02
int 21h

那这两段什么意思呢?为什么要存0和与0DH比较呢?


2006-12-11 18:23
lefttime
Rank: 1
等 级:新手上路
帖 子:162
专家分:0
注 册:2006-10-6
收藏
得分:0 

org 100h ;代码区从0100H处开始,这样可用于建立.com程序
start: MOV bx, 0 ;对BX清零,准备用于累加输入数的实际值
input : MOV ah, 01 ;1号中断输入接收字符ASCII码
int 21h
cmp al, 0dh ;输入10进制数以回车结束,这里判断是不是回车,如果是就直接输出结果啦
jz write
sub al, 30h ;转换成实际数值
MOV cl, al
MOV ch, 0 ;上行开始赋值,(CX)=(AL),用CX来暂存数值
MOV ax, bx ;返回上一次输入的数转换成10进制后的值
MOV bx, 0ah ;BX用作进制数中的权
mul bx
MOV bx, ax ;把结果暂存在BX中
add bx, cx ;把刚刚存放在CX中的值加进来,准备下一次的累加
jmp input ;强制转移到input执行

write : MOV dl, 0dh ;0dh是回车键的ASCII码
MOV ah, 02h
int 21h ;执行后相当于回车
MOV dl, 0ah ;0ah是换行的ASCII代码
MOV ah, 02
int 21h ;执行后就相当于换行啦
汇编中比较麻烦,不像C/C++中一个'\n'、一个endl就可以解决换行后直接到首格,只好调用CR、LF二个值来进行标准换行


我是金子,我要闪光的
2006-12-11 18:55
cenriter
Rank: 1
等 级:新手上路
帖 子:16
专家分:0
注 册:2006-12-4
收藏
得分:0 

帮我看看下面的

[此贴子已经被作者于2006-12-11 22:22:15编辑过]


2006-12-11 19:52
lefttime
Rank: 1
等 级:新手上路
帖 子:162
专家分:0
注 册:2006-10-6
收藏
得分:0 

呵呵~~~注意看看一些计算机书后,大部分都会有说明
ASCII码中00-1F都是属于控制符号,以后编程多注意自然就记住啦


我是金子,我要闪光的
2006-12-11 19:57
cenriter
Rank: 1
等 级:新手上路
帖 子:16
专家分:0
注 册:2006-12-4
收藏
得分:0 

code segment
assume cs: code
org 100h
start:

MOV bx, 0

input : MOV ah, 01
int 21h
cmp al, 0dh
jz write ;
sub al, 30h
MOV cl, al
MOV ch, 0
MOV ax, bx
MOV bx, 0ah
mul bx ;乘以0AH而不是10H,一直理解错就在这里。
MOV bx, ax
add bx, cx
jmp input

write : MOV dl, 0dh
MOV ah, 02h
int 21h
MOV dl, 0ah
MOV ah, 02
int 21h ; 输出回车和换行

;例如我们输入“65535”,到这里为止BX中就是0FFFFH

MOV dh, 2
CC : MOV si, 2
BB: MOV AH, 0
MOV AL, BH ;BX中的BH给AL,那这时候AX变成了00FFH

MOV CL, 4

SHL AX, CL ;AX变成0FF0H

cmp ah, 10 ;AH=0FH
MOV BH, al ;BH=0F0H
jC disp ;AH小于,则CF=1,则跳转DISP
add ah, 7 ;这里是为了A到F的输出

disp: add ah, 30h
MOV dl, ah
MOV ah, 02
int 21h

dec si ;循环1次
mov cx, si
jcxz disp1
jmp bb
disp1 : MOV bh, bl
dec dh ; 像做BH一样处理BL

jnz cc


EXIT: MOV AH, 1
INT 21H

MOV AH, 4CH
INT 21H

code ends
end start


[此贴子已经被作者于2006-12-12 20:12:49编辑过]


2006-12-11 22:22
快速回复:[求解释]10进制输入16进制输出
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.021563 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved