一堆蓝色的 零

dongjiutiao 2009-11-12 01:23:35
DATA SEGMENT
STR DB "ABC",0ah,0dh,'$'
DATA ENDS

CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START:
MOV AX,DATA--------------
MOV DS,AX----------------为什么要加这个才显示
MOV DX,OFFSET STR
MOV AX,09H
MOV DH,1
MOV DL,71H
MOV CX,1
INT 21H
MOV AH,4CH
INT 21H
CODE ENDS
END START

这段程序运行后显示一堆蓝色的零这是为什么??
...全文
241 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
dongjiutiao 2009-11-18
  • 打赏
  • 举报
回复
MOV SI,OFFSET STR
MOV AL,[SI]
INC SI

最初我觉得是程序少了这3个才显示0这3必须要配合使用?
genboo 2009-11-18
  • 打赏
  • 举报
回复
中断程序类似于子程序调用,中断21h和10h只不过是中断入口,相当于call指令。
要自己编写中断程序,不仅仅是删除入口,还要写里面的实现功能。
dongjiutiao 2009-11-18
  • 打赏
  • 举报
回复
为啥非要用21h和10H呢
dongjiutiao 2009-11-18
  • 打赏
  • 举报
回复
那就奇怪了,我把我那个21H去掉它显示一些奇怪的东西,反正不是ABC。MOV AL,[SI]
INC SI这俩对调显示字幕B(我记得是)不对调显示字幕A

去掉 MOV DX,OFFSET STR 不显示
MOV CX,SI改成 MOV CX,3不断显示ABC........
genboo 2009-11-18
  • 打赏
  • 举报
回复
也不一定非要用中断21H和10H,可以自己写代码丫
genboo 2009-11-17
  • 打赏
  • 举报
回复
回复楼上:本程序不但使用DOS中断,而且使用了BIOS中断。

MOV DX,OFFSET STR
MOV AH,9
INT 21H
;调用DOS-9号功能显示字符串

MOV AH,9
MOV AL,[SI]
MOV BH,0
MOV BL,71H
MOV CX,1
INT 10h
;调用BIOS-9号功能在当前光标处写字符,字符是一个一个的写,
;如果不加一个换行,则后面的字符将覆盖前面的字符

dongjiutiao 2009-11-17
  • 打赏
  • 举报
回复
楼上的代码我给改了一下还是这样看着方便

DATA SEGMENT
STR DB "ABC","$"
DATA ENDS

CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START:
MOV AX,DATA
MOV DS,AX
MOV DX,OFFSET STR
MOV SI,OFFSET STR
MOV AH,9
MOV AL,[SI]
INC SI
MOV BH,0
MOV BL,71H
MOV CX,SI
INT 10h
LOOP START
MOV AH,4CH
INT 21H
CODE ENDS
END START
不过问题又出来了,不是只显示一个数就是不断显示一堆ABC
genboo 2009-11-16
  • 打赏
  • 举报
回复
DATA  SEGMENT 
STR DB "ABC",0ah,0dh,'$'
JEF DB 0ah,0dh,'$' ;回车、换行
DATA ENDS

CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START:
MOV AX,DATA
MOV DS,AX
DOS:
MOV DX,OFFSET STR
MOV AH,9 ;调用DOS-9号功能显示字符串
INT 21H
MOV CX,3
MOV SI,OFFSET STR
BIOS: ;显示蓝色字符
PUSH CX
MOV AH,9
MOV AL,[SI]
MOV BH,0 ;显示页
MOV BL,71H ;显示蓝色
MOV CX,1 ;写字符个数
INT 10h ;调用BIOS-9号功能写字符

LEA DX,JEF ;回车、换行
MOV AH,09
INT 21H

INC SI
POP CX
LOOP BIOS

MOV AH,4CH
INT 21H
CODE ENDS
END START
devilidea 2009-11-15
  • 打赏
  • 举报
回复
genboo 2009-11-15
  • 打赏
  • 举报
回复
DATA SEGMENT
STR DB "ABC",0ah,0dh,'$'
DATA ENDS

CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START:
MOV AX,DATA
MOV DS,AX

MOV DX,OFFSET STR
MOV AH,9 ;调用DOS-9号功能显示字符串
INT 21H

MOV AL,41H ;A的ASCII码
MOV AH,9
MOV BH,0 ;显示页
MOV BL,71H ;显示蓝色
MOV CX,3 ;写字符个数
INT 10h ;调用BIOS-9号功能写字符

MOV AH,4CH
INT 21H
CODE ENDS
END START
dongjiutiao 2009-11-15
  • 打赏
  • 举报
回复
奇怪了这回1楼显示的是乱码
nanlingcg 2009-11-14
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 yyycs123 的回复:]
代码没问题,masm共享版编译也通过。
[/Quote]
楼主的代码有问题。
1楼的正确。
2楼的也有错。。。

编译通过了,代码也可以有问题.
yyycs123 2009-11-14
  • 打赏
  • 举报
回复
代码没问题,masm共享版编译也通过。
dongjiutiao 2009-11-14
  • 打赏
  • 举报
回复
我用的MASM6.0怎么没法通过......
BAYNPU 2009-11-13
  • 打赏
  • 举报
回复
使用汇编编译器ML6.15和MASM5.0版本都可以汇编上面的源程序呀.
dongjiutiao 2009-11-13
  • 打赏
  • 举报
回复
2楼的例子遇到无效指令需要关闭,1楼的例子无法通过LINK
BAYNPU 2009-11-12
  • 打赏
  • 举报
回复
ASSUME CS:CODE,DS:DATA;ASSUME伪指令通知MASM用指定的段寄存器来寻址对应的逻辑段,即建立段寄存器与段的缺省关系。
START:
MOV AX,DATA--------------
MOV DS,AX;初始化数据段段寄存器
nanlingcg 2009-11-12
  • 打赏
  • 举报
回复
中断调用混淆,看一楼帮你的校正。
dongjiutiao 2009-11-12
  • 打赏
  • 举报
回复
ASSUME CS:CODE,DS:DATA
不是已经设置段了吗
alZou 2009-11-12
  • 打赏
  • 举报
回复
DATA SEGMENT
STR DB "ABC",0dh,0ah,'$'
DATA ENDS

CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START:
MOV AX,DATA
MOV DS,AX

mov bh,0

MOV DH,1
MOV DL,71H

mov ah,2
int 10h

MOV DX,OFFSET STR
MOV AX,09H

INT 21H
MOV AH,4CH
INT 21H
CODE ENDS
END START
加载更多回复(1)

21,459

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧