重新整理 实验九 结果显示
程序放在cmd和command中执行结果一样,到loop s的时候用p后出现的效果都是每行开头少一个w,如果在loop s指令之前用g指令就不会出现这种情况,就会完整显示。??由于还不能上图,先吧程序放上,在尽量把复制的图上上来吧。。assume cs:codesg,ds:datasg
datasg segment
db 'welcome to masm!'
datasg ends
codesg segment
start: mov ax,datasg
mov ds,ax
mov ax,0b800h
mov es,ax
mov bx,0
mov si,0
mov cx,16
s: mov al,
mov ah,2h
mov es:,ax
mov ah,24h
mov es:,ax
mov ah,71h
mov es:,ax
inc bx
add si,2
loop s
mov ax,4c00h
int 21h
codesg ends
end start
这是用g指令的情况:
-r
AX=0000BX=0000CX=0045DX=0000SP=0000BP=0000SI=0000DI=0000
DS=14F7ES=14F7SS=1507CS=1508IP=0000 NV UP EI PL NZ NA PO NC
1508:0000 B80715 MOV AX,1507
-g
Program terminated normally
- welcome to masm!
welcome to masm!
welcome to masm!
这是一步步执行到loop s的时候:
-t
AX=7177BX=0000CX=0010DX=0000SP=0000BP=0000SI=0000DI=0000
DS=1507ES=B800SS=1507CS=150elcome to masm! UP EI PL NZ NA PO NC
1508:002A 43 INC Belcome to masm!
-t elcome to masm!
AX=7177BX=0001CX=0010DX=0000SP=0000BP=0000SI=0000DI=0000
DS=1507ES=B800SS=1507CS=1508IP=002B NV UP EI PL NZ NA PO NC
1508:002B 83C602 ADD SI,+02
-t
AX=7177BX=0001CX=0010DX=0000SP=0000BP=0000SI=0002DI=0000
DS=1507ES=B800SS=1507CS=1508IP=002E NV UP EI PL NZ NA PO NC
1508:002E E2E3 LOOP 0013
-p
AX=7121BX=0010CX=0000DX=0000SP=0000BP=0000SI=0020DI=0000
DS=1507ES=B800SS=1507CS=1508IP=0030 NV UP EI PL NZ AC PO NC
1508:0030 B8004C MOV AX,4C00 我认为是这样的:-t或-p命令内部将调用中断,向屏幕显示一些信息。这些信息实在你显示字符串之后显示的,所以有可能覆盖掉你已经显示的部分,至于为什么有的位置被覆盖,有的位置不会被覆盖我也不是很清楚。 恩,自己再慢慢想想,谢谢版主了 仰望天上的光 发表于 2012-2-2 09:53 static/image/common/back.gif
我认为是这样的:-t或-p命令内部将调用中断,向屏幕显示一些信息。这些信息实在你显示字符串之后显示的,所 ...
恩,自己再慢慢想想,谢谢版主了 额,写了个,给你参考参考assume cs:code,ds:data
data segment
db 'welcome to masm!'
data ends
code segment
start: ;多空几个空格和行,还有多定义你会看的明白,这些习惯要养成
mov ax,data
mov ds,ax ;定义数据段
mov ax,0b800h
mov es,ax ;定义显存位置
sub bx,bx ;初始化
sub si,si ;si作为数据段内地址,为源变址寄存器
sub di,di ;di作为显存地址,为目的变址寄存器
mov cx,3 ;为外循环控制显存行,这里设置3行
next1:
push di
push cx ;保存数据
push si
mov dl,2 ;这里我就把3行都定义为绿色
mov cx,10h ;这里设置内循环次数,因为有16字节,所以循环16次
next2:
mov al,ds: ;把数据段中的第一字节存放到al中
mov es:,al ;把数据存放到显存中的0位置,也就是偶字节
mov es:,dl ;把颜色存放到显存的奇字节
inc si ;把数据段的偏移地址+1,也就是等于把光标定义到数据段的下一个字节
add di,2 ;把显存的偏移地址+1,因为要用到2个字节,所以要+2
loop next2
pop si
pop cx
pop di ;数据还原成原来的样子
add di,0A0h ;因为显存一行有160个字节,而前面偏移地址为0,现在+0a0h,也就把光标定位到下一行
loop next1
mov ax,4c00h
int 21h
code ends
end start Push 发表于 2012-2-3 15:07 static/image/common/back.gif
额,写了个,给你参考参考
朋友,你好,请问你这放上来的是什么啊,怎么弄的啊,教教我好么!{:5_91:} Push 发表于 2012-2-3 15:07 static/image/common/back.gif
额,写了个,给你参考参考
呵呵,写的不错,绿色无边啊~{:5_93:} 每天坚持点点点 发表于 2012-2-3 21:03 static/image/common/back.gif
呵呵,写的不错,绿色无边啊~
{:5_103:}没注意看的你的那个debug调试问题...还以为是程序问题...
页:
[1]