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中运行,没有任何反应,什么也不显示,是不是我系统的问题啊?
6 个解决方案
#1
先运行下 debgu 然后 Q 命令退出,再运行你的程序试试?你的程序是直些 dos 文本缓存的,win7 这样的虚拟环境,兼容性表现得就差了些。要么,装个虚拟机吧。
#2
为啥要用俩个循环?ax中, ah放字符属性,al放ascii字符。第一循环一次就可以办的的呀
s1: mov al,[si]
mov ah,0ah
mov es:[di],ax
inc si
add di,2
loop s1
#3
另外
1,最后下载一个masm 6.1X以上的汇编器。
2,在全屏模式或纯dos模式下运行这个程序
1,最后下载一个masm 6.1X以上的汇编器。
2,在全屏模式或纯dos模式下运行这个程序
#4
我把源码复制下来在XP 下编译测试了,程序没有问题。
#5
顶一下`~
#6
;楼主:
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
;这个程序在:汇编语言程序设计实验集成环境(西华师范大学开发)
;可以运行,并显示!
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
;这个程序在:汇编语言程序设计实验集成环境(西华师范大学开发)
;可以运行,并显示!
#1
先运行下 debgu 然后 Q 命令退出,再运行你的程序试试?你的程序是直些 dos 文本缓存的,win7 这样的虚拟环境,兼容性表现得就差了些。要么,装个虚拟机吧。
#2
为啥要用俩个循环?ax中, ah放字符属性,al放ascii字符。第一循环一次就可以办的的呀
s1: mov al,[si]
mov ah,0ah
mov es:[di],ax
inc si
add di,2
loop s1
#3
另外
1,最后下载一个masm 6.1X以上的汇编器。
2,在全屏模式或纯dos模式下运行这个程序
1,最后下载一个masm 6.1X以上的汇编器。
2,在全屏模式或纯dos模式下运行这个程序
#4
我把源码复制下来在XP 下编译测试了,程序没有问题。
#5
顶一下`~
#6
;楼主:
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
;这个程序在:汇编语言程序设计实验集成环境(西华师范大学开发)
;可以运行,并显示!
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
;这个程序在:汇编语言程序设计实验集成环境(西华师范大学开发)
;可以运行,并显示!