鱼C论坛

 找回密码
 立即注册
查看: 1826|回复: 5

一个关于call指令的问题

[复制链接]
发表于 2012-8-30 20:25:04 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
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:[di+10h]   ;将颜色属性放入ah中
                 
                 sub bx,bx
                 
                 
                 
                 mov cx,16    ;行循环16次
                 
                 

        s:   
             
                 mov al,ds:[bx]
                 
                 mov es:[si],al     ;将字符复制到显示的行中
                 
                 mov es:[si+1],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!”我真的不知道那出错了。谢谢各位了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2012-8-30 20:27:04 | 显示全部楼层
各位,不好意思,标题写错了。是一个实验九的问题
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2012-8-30 21:04:45 | 显示全部楼层
你用的什么操作系统win7还是xp
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2012-8-30 21:17:40 | 显示全部楼层
你的ax在第二个循环改变了,你把第一个·循环中mov es,ax挪到所有循环之前,我改了一下,这个实现的是三个。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 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:[di+10h]   ;将颜色属性放入ah中
                 
                 sub bx,bx
                 
                 
                 
                 mov cx,16    ;行循环16次
                 
                 

        s:   
            
                 mov al,ds:[bx]
                 
                 mov es:[si],al     ;将字符复制到显示的行中
                 
                 mov es:[si+1],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
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2012-8-31 07:08:10 | 显示全部楼层

恩恩,谢谢了,我刚试试了一下,真的可以了。呵呵,虽然还有点小问题,不过改改就好了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-9-27 23:34

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表