C开头 发表于 2012-8-30 20:25:04

一个关于call指令的问题

assume cs:codesg,ds:datasg,ss:stack
datasg segment
db 'welcome to masm!'
db 02h,24h,71h
datasg ends

stack segment
dw 8 dup(0)
stack ends

codesg segment

start:

         mov ax,datasg
               mov ds,ax    ;设置段地址
               
               mov ax,stack
               mov ss,ax
               mov sp,10h    ;栈
               
               mov ax,0b872h    ;显示的段地址
               
               sub di,di
               
               sub si,si
               
               mov cx,3    ;3行,循环3次
               
    s1:
               push cx   ;将cx的值推进栈中


               
               mov es,ax
               
               mov ah,ds:   ;将颜色属性放入ah中
               
               sub bx,bx
               
               
               
               mov cx,16    ;行循环16次
               
               

        s:   
             
               mov al,ds:
               
               mov es:,al   ;将字符复制到显示的行中
               
               mov es:,ah    ;将颜色属性放入字符的后一个字节中
               
               inc bx    ;改变字符
               
               add si,2
               
               loop s
               
               add di,1   ;改变颜色属性
               
               
               
               add si,0a0h
               
               pop cx
               
               loop s1
               
               mov ax,4c00h
               int 21h
               
codesg ends
end start

这个是我自己写的一个不知道为什么只能出现第一行的“welcome to manm!”我真的不知道那出错了。谢谢各位了。

C开头 发表于 2012-8-30 20:27:04

各位,不好意思,标题写错了。是一个实验九的问题{:5_111:}

喜爱健康 发表于 2012-8-30 21:04:45

你用的什么操作系统win7还是xp

喜爱健康 发表于 2012-8-30 21:17:40

你的ax在第二个循环改变了,你把第一个·循环中mov es,ax挪到所有循环之前,我改了一下,这个实现的是三个。

喜爱健康 发表于 2012-8-30 21:18:21

assume cs:codesg,ds:datasg,ss:stack
datasg segment
db 'welcome to masm!'
db 02h,24h,71h
datasg ends

stack segment
dw 8 dup(0)
stack ends

codesg segment

start:

         mov ax,datasg
               mov ds,ax    ;设置段地址
               
               mov ax,stack
               mov ss,ax
               mov sp,10h    ;栈
               
               mov ax,0b872h    ;显示的段地址
               
               sub di,di
               
               sub si,si
                  mov es,ax
               mov cx,3    ;3行,循环3次
               
    s1:
               push cx   ;将cx的值推进栈中


               
               
               
               mov ah,ds:   ;将颜色属性放入ah中
               
               sub bx,bx
               
               
               
               mov cx,16    ;行循环16次
               
               

      s:   
            
               mov al,ds:
               
               mov es:,al   ;将字符复制到显示的行中
               
               mov es:,ah    ;将颜色属性放入字符的后一个字节中
               
               inc bx    ;改变字符
               
               add si,2
               
               loop s
               
               add di,1   ;改变颜色属性
               
               
               
               add si,0a0h
               
               pop cx
               
               loop s1
               
               mov ax,4c00h
               int 21h
               
codesg ends
end start

C开头 发表于 2012-8-31 07:08:10

喜爱健康 发表于 2012-8-30 21:18 static/image/common/back.gif
assume cs:codesg,ds:datasg,ss:stack
datasg segment
db 'welcome to masm!'


恩恩,谢谢了,我刚试试了一下,真的可以了。呵呵,虽然还有点小问题,不过改改就好了{:5_109:}
页: [1]
查看完整版本: 一个关于call指令的问题