【8086汇编】这个显示字符串的程序为什么显示不出来?

AllStarGame 2010-07-19 09:24:10
assume cs:code,ds:data
data segment
db 'Hello World!' ;定义要显示的字符串(共12字节)
data ends

code segment
start:
mov ax,data
mov ds,ax ;ds绑定数据段


mov ax,0b872h ;算出屏幕第12行中间的显存的段起始位置放入ax中
mov es,ax ;此时es为屏幕第12行中间的显存的段起始位置

mov si,0 ;初始化寄存器,分别用来控制奇偶地址
mov di,0

mov cx,0ch ;第一次循环为0ch次
s1: mov al,ds:[si] ;读取单个字符
mov es:[di],al ;写到显存里面
inc si
add di,2
loop s1 ;此循环实现偶地址中存放字符

mov si,1 ;si的值设为1,从而为在显存奇地址中存放字符的颜色属性做准备
mov al,0ah ;设置颜色属性为绿色高亮

mov cx,0ch ;第二个循环也为0ch(12)次
s2: mov es:[si],al
add si,2
loop s2 ;此循环实现奇地址中存放字符的颜色属性

;程序暂停,等待输入
MOV AH,01H
INT 21H

mov ax,4c00h
int 21h
code ends

end start

我用MASM5编译,系统是windows7,在CMD中运行,没有任何反应,什么也不显示,是不是我系统的问题啊?
...全文
814 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
ymwjz 2010-08-06
  • 打赏
  • 举报
回复
;楼主:
assume cs:code,ds:data
data segment
db 'Hello World!$' ;定义要显示的字符串(共12字节)
data ends

code segment
start:
mov ax,data
mov ds,ax ;ds绑定数据段


mov ax,0b872h ;算出屏幕第12行中间的显存的段起始位置放入ax中
mov es,ax ;此时es为屏幕第12行中间的显存的段起始位置

mov si,0 ;初始化寄存器,分别用来控制奇偶地址
mov di,0

mov cx,0ch ;第一次循环为0ch次
s1: mov al,ds:[si] ;读取单个字符
mov es:[di],al ;写到显存里面
inc si
add di,2
loop s1 ;此循环实现偶地址中存放字符

mov si,1 ;si的值设为1,从而为在显存奇地址中存放字符的颜色属性做准备
mov al,0ah ;设置颜色属性为绿色高亮

mov cx,0ch ;第二个循环也为0ch(12)次
s2: mov es:[si],al
add si,2
;这个程序在:汇编语言程序设计实验集成环境(西华师范大学开发)
;可以运行,并显示!
mochhk 2010-07-19
  • 打赏
  • 举报
回复
顶一下`~
vcnewer 2010-07-19
  • 打赏
  • 举报
回复
我把源码复制下来在XP 下编译测试了,程序没有问题。
masmaster 2010-07-19
  • 打赏
  • 举报
回复
另外
1,最后下载一个masm 6.1X以上的汇编器。
2,在全屏模式或纯dos模式下运行这个程序
masmaster 2010-07-19
  • 打赏
  • 举报
回复
为啥要用俩个循环?ax中, ah放字符属性,al放ascii字符。第一循环一次就可以办的的呀
s1: mov al,[si]
mov ah,0ah
mov es:[di],ax
inc si
add di,2
loop s1
zara 2010-07-19
  • 打赏
  • 举报
回复
先运行下 debgu 然后 Q 命令退出,再运行你的程序试试?你的程序是直些 dos 文本缓存的,win7 这样的虚拟环境,兼容性表现得就差了些。要么,装个虚拟机吧。

21,459

社区成员

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

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