每天坚持点点点 发表于 2012-2-1 21:58:56

重新整理 实验九 结果显示

程序放在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

仰望天上的光 发表于 2012-2-1 21:58:57

我认为是这样的:-t或-p命令内部将调用中断,向屏幕显示一些信息。这些信息实在你显示字符串之后显示的,所以有可能覆盖掉你已经显示的部分,至于为什么有的位置被覆盖,有的位置不会被覆盖我也不是很清楚。

每天坚持点点点 发表于 2012-2-2 22:30:13

恩,自己再慢慢想想,谢谢版主了

每天坚持点点点 发表于 2012-2-2 22:30:38

仰望天上的光 发表于 2012-2-2 09:53 static/image/common/back.gif
我认为是这样的:-t或-p命令内部将调用中断,向屏幕显示一些信息。这些信息实在你显示字符串之后显示的,所 ...

恩,自己再慢慢想想,谢谢版主了

Push 发表于 2012-2-3 15:07:40

额,写了个,给你参考参考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

每天坚持点点点 发表于 2012-2-3 20:53:53

Push 发表于 2012-2-3 15:07 static/image/common/back.gif
额,写了个,给你参考参考

朋友,你好,请问你这放上来的是什么啊,怎么弄的啊,教教我好么!{:5_91:}

每天坚持点点点 发表于 2012-2-3 21:03:20

Push 发表于 2012-2-3 15:07 static/image/common/back.gif
额,写了个,给你参考参考

呵呵,写的不错,绿色无边啊~{:5_93:}

Push 发表于 2012-2-4 23:51:32

每天坚持点点点 发表于 2012-2-3 21:03 static/image/common/back.gif
呵呵,写的不错,绿色无边啊~

{:5_103:}没注意看的你的那个debug调试问题...还以为是程序问题...
页: [1]
查看完整版本: 重新整理 实验九 结果显示