鱼C论坛

 找回密码
 立即注册
查看: 2247|回复: 7

实验九 编译不通过

[复制链接]
发表于 2012-6-5 20:12:41 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 wei522688662 于 2012-6-5 20:27 编辑

assume ds:data,cs:code,ss:sta

data        segment
        db        'welcome to masm!'         ;用si定位
        db        2,36,113,122        ;用di定位 这里我想打印4行 增加一行白底绿色高亮
data         ends
sta                segment
        dw        0,0
sta                ends
code        segment
start:        mov ax,0b800h
                mov es,ax
                mov sp,4h
                mov bx,0h       ;定位行
                mov si,0h
                mov di,10h
                mov dx,0h
                mov cx,4h ;4行文字
                push cx
        lie:        mov cx,10h ;16列字符
                hang:        mov al,ds:[si]
                                mov es:[bx+dx],al
                                mov ah,ds:[di]
                                mov es:[bx+dx+1],ah
                        
                                add dl,2h
                                inc si
                                loop hang
                        pop cx
                        mov bx,0a0h
                        inc di
                        loop lie
        
                mov ax,4c00h
                int 21h
code        ends

end        start
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2012-6-5 21:18:07 | 显示全部楼层
这是我的代码
assume cs:code,ds:data,ss:stackdata segment
 db 'welcome to masm!'
 db 02h,24h,71h
data endsstack segment
 dw 8 dup(8)
stack endscode segmentstart: mov ax,data
  mov ds,ax
  mov ax,stack
  mov ss,ax
  mov sp,10h
  
  mov bx,10h
  mov ax,0b872h
  
  mov cx,3
s1:  
  push ax
  push cx
  
  mov es,ax
  mov si,0
  mov di,0
  
  mov cx,10h
s2:  
  mov al,ds:[si]
  mov es:[di],al
  mov ah,ds:[bx]
  mov es:[di+1],ah
  inc si
  add di,2
  loop s2
  
  inc bx
  pop cx
  pop ax
  add ax,0ah
  
  loop s1
    mov ax,4c00h
  int 21h
  
code ends
end start
  
  
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2012-6-5 22:11:50 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2012-6-6 11:37:14 | 显示全部楼层
   mov es:[bx+dx],al
编译不出来 好像是这的原因·好像不能用dx··
就是能编译出来   你的那个程序好像也不是很对吧···
si··列··都得入栈··你栈空间不够··
还有你那个mov bx,oaoh·不是很懂···
我也是新手  能看出来的就这么多了····
呵呵·····
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2012-6-6 15:42:34 | 显示全部楼层
静雨纷纷 发表于 2012-6-6 11:37
mov es:,al
编译不出来 好像是这的原因·好像不能用dx··
就是能编译出来   你的那个程序好像也不是很 ...

十分感谢你,mov bx,0a0h是每次增加  以达到换行的目的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2012-6-6 23:33:12 | 显示全部楼层
wei522688662 发表于 2012-6-6 15:42
十分感谢你,mov bx,0a0h是每次增加  以达到换行的目的

弱弱的说一下 ··不应该是add bx,0a0h
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2012-6-7 08:34:45 | 显示全部楼层
静雨纷纷 发表于 2012-6-6 23:33
弱弱的说一下 ··不应该是add bx,0a0h

你是对的 ⊙﹏⊙b汗  是我粗心 打错了 但是本意是add的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2012-6-8 08:34:08 | 显示全部楼层
:L唉...求人不如求己 最后还是自己解决了

assume ds:data,cs:code,ss:stack

data        segment
        db        'welcome to masm!'         ;用si定位
        db        2,36,113,122                ;用di定位
data         ends
stack        segment stack
        dw        0,0,0,0,0,0,0,0
stack        ends

code segment
;==================初始化==========================================
start:        mov ax,0b800h
                mov es,ax
                mov ax,data
                mov ds,ax
                mov ax,stack
                mov ss,ax
                mov sp,16

                mov ax,0h
                mov si,0h                                ;为数据区字符索引
                mov di,10h                                ;为数据区属性索引
                mov bx,0c0h                                ;显存行索引+列索引
                mov cx,4h                                ;
;==================初始化结束=======================================
;==================循环4行==========================================
                lie:        push cx
                                mov cx,10h                        ;每一行16个字符
                                mov si,0h                        ;每一次打印完成一行之后,索引回到行首
               
                                hang:        mov al,ds:[si]                ;取字符
                                                mov es:[bx],al                ;字符装入显存
                                                mov ah,ds:[di]                ;取属性
                                                mov es:[bx+1],ah        ;属性装入显存
                                               
                                                inc si                       
                                                add bx,2
                                                loop hang
               
                                pop cx
                                inc di
                                add bx,0a0h                        ;bx为行索引,此行代码为换行
                                sub bx,20h                        ;换行后回到行首列(相对来说,不是绝对行首)
                                loop lie
;==================循环4行结束=======================================
                mov ax,4c00h
                int 21h
code ends
end start
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-10-8 08:26

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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