| 编程中国 | 业界新闻 | 技术文章 | 视频教程 | 下载频道 | 程序源码 | 个人空间 | 编程论坛
全能ASP/PHP/ASP.NET主机,支持月付专业 MSSQL 数据库空间,支持月付专业 MySQL 数据库空间,支持月付学习型 ASP/PHP/ASP.NET 主机 30元/年
高端软件开发 = 年薪十万不是梦赛孚耐:软件保护加密专家身份认证令牌USB KEY 
共有 513 人关注过本帖
标题:[求助]这里AL的值怎么变化的?
收藏  订阅  推荐  打印 
hero2007
Rank: 2
来自:湖北武汉
等级:注册会员
威望:1
帖子:130
积分:1450
注册:2007-3-22
[求助]这里AL的值怎么变化的?

DATAS SEGMENT
TAB DB 12H,83H,00H,0ABH,3AH,2CH,98H,0BEH,0B1H,0B2H,45H,65H,0DCH,88H,0DCH,88H,0DCH,88H
RESULT DB 100 DUP(?)
COUNT =RESULT-TAB
DATAS ENDS

STACKS SEGMENT
DB 200 DUP(?)
STACKS ENDS

CODES SEGMENT
ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
MOV AX,DATAS
MOV DS,AX

MOV AL,0
MOV CX,COUNT
LEA SI,TAB
LEA DI,RESULT

AGAIN: TEST BYTE PTR[SI],80H
JNZ A
MOV DL,BYTE PTR[SI]
MOV [DI],DL
INC SI
INC DI
LOOP AGAIN
JMP OUTA

A: INC AL
NEG BYTE PTR[SI]
MOV DL,BYTE PTR[SI]
MOV [DI],DL
INC SI
INC DI
LOOP AGAIN

OUTA: ADD AL,30H
CMP AL,39H
JA B
MOV AH,2
MOV DL,AL
INT 21H
JMP EXIT
B: ADD AL,07H

MOV DL,'0'
MOV AH,2
INT 21H

MOV AH,0
MOV DL,0
MOV AH,2
MOV DL,AL
INT 21H

MOV AH,2
MOV DL,'H'
INT 21H



EXIT: MOV AH,4CH
INT 21H
CODES ENDS
END START

为什么输出结果是00H,而不是0CH ?

如果改成:

B: ADD AL,07H
MOV BL,AL
MOV DL,'0'
MOV AH,2
INT 21H

MOV AH,0
MOV DL,0
MOV AH,2
MOV DL,BL
INT 21H

MOV AH,2
MOV DL,'H'
INT 21H

就能输出0CH

这里的AL的值怎么受到
MOV DL,'0'
MOV AH,2
INT 21H
影响而变为30H的?





搜索更多相关主题的帖子: STACKS  SEGMENT  MOV  DATAS  RESULT  
2007-10-9 09:17
aoaoaoao
Rank: 2
等级:注册会员
帖子:81
积分:938
注册:2007-5-14

中断int 21H的2 有返回值放在al中,返回值是最后输出的字符



MOV DL,'0'
MOV AH,2
INT 21H
后 al的值被改写成'0'了..
2007-10-9 12:19
justholdon
Rank: 2
等级:注册会员
威望:2
帖子:69
积分:808
注册:2007-4-23

MOV AH,2
INT 21H
02号功能会改变al的值,所以用时要保存一下al的值!

just hold on !
2007-10-26 12:35
关于我们 | 广告合作 | 编程中国 | 清除Cookies | Archiver | WAP | TOP

编程中国 版权所有,并保留所有权利。鲁ICP备08000592号
Powered by Discuz, Processed in 0.050719 second(s), 9 queries.
Copyright©2004-2008, BCCN.NET, All Rights Reserved