半生缘 发表于 2013-3-6 22:44:36

汇编新手求助

本帖最后由 半生缘 于 2013-3-7 10:54 编辑

前几天看有人发个贪吃的蛇 编译通过 但是 运行不了
于是乎打算自己写一个 还没写别的 刚写欢迎语 就不知道怎么的 也是运行就半路结束(初始化图形模式就自动退出)
但是 只是 画个方框就没事
assume cs:code,ds:data,ss:stack
stack segment
      db 128 dup(0)
stack ends

data segment

shiwu      db 1 dup(0,0,0)
jiatou      db 1 dup(0,0,0)
she      db 400 dup(0,0,0bbh)
changdu      dw 0

huan12S      db 02h,00h,0FAh,00h,13h,0E0h,94h,20h,55h,40h,21h,00h,21h,00h,52h,80h,4Ah,80h,84h,40h,18h,20h,00h,00h
ying12S      db 42h,00h,2Dh,0E0h,09h,20h,0C9h,20h,49h,20h,49h,20h,4Fh,20h,49h,60h,41h,00h,0B0h,00h,8Fh,0E0h,00h,00h
shi12S      db 11h,00h,2Fh,0E0h,21h,00h,6Fh,0E0h,0A9h,20h,29h,20h,2Fh,0E0h,25h,00h,22h,00h,25h,00h,38h,0E0h,00h,00h
yong12S      db 7Fh,0C0h,44h,40h,44h,40h,7Fh,0C0h,44h,40h,44h,40h,7Fh,0C0h,44h,40h,44h,40h,84h,40h,85h,0C0h,00h,00h
hui12S      db 40h,00h,2Fh,0E0h,08h,00h,0A8h,00h,68h,00h,28h,00h,48h,00h,48h,00h,0C8h,00h,48h,00h,4Fh,0E0h,00h,00h
bian12S      db 21h,00h,2Fh,0E0h,48h,20h,9Fh,0E0h,0E8h,00h,4Fh,0E0h,0BAh,0A0h,0CFh,0E0h,2Ah,0A0h,0DAh,0A0h,28h,60h,00h,00h
tan12S      db 04h,00h,0Ah,00h,35h,80h,0DFh,60h,01h,00h,3Fh,80h,20h,80h,24h,80h,24h,80h,0Bh,00h,0F0h,0C0h,00h,00h
chi12S      db 02h,00h,0F2h,00h,97h,0E0h,98h,00h,97h,80h,90h,80h,91h,00h,0F2h,00h,04h,20h,04h,20h,07h,0E0h,00h,00h
she12S      db 21h,00h,20h,80h,27h,0E0h,0FCh,20h,0AAh,00h,0AAh,40h,0FAh,80h,23h,00h,2Ah,20h,3Ah,20h,0CBh,0E0h,00h,00h

data ends

code segment
dazi:      push ax
      push bx
      push dx
      push cx
      push si
      push di

      mov si,dx
      mov di,cx
      mov cx,12
s1:      push cx
      mov cx,2
s2:      push cx
      mov cx,8

      mov al,80h                ;比较最高为 第一位
s3:      mov ah,
      and ah,al
      cmp ah,al                        ;比较相同画点 不同跳出本次循环
      jnz loop1

      push ax
      push cx

      mov al,0bbh
      mov ah,0ch
      mov dx,si
      mov cx,di
      int 10h

      pop cx
      pop ax

loop1:      inc di                        ;下一个点位置
      shr al,1                        ;al 右移以为 比较下一位
      loop s3

      inc bx                        ;取下一字节字模地址
      pop cx
      loop s2

      pop cx
      inc si
      loop s1

      pop di
      pop si
      pop cx
      pop dx
      pop bx
      pop ax
      ret
      
start:      mov ax,stack
      mov ss,ax
      mov sp,80h
      mov ax,data
      mov ds,ax

      mov ax,13h      ;初始化AL=13 320×200 256色图形 (EGA)
      int 10h

      mov dx,100      ;起点行
      mov di,24      ;起点列

      mov bx,offset huan12S      ;取字模地址
      mov cx,9                ;循环9次
zz:      push cx
      mov cx,di

      call dazi                ;调用打字

      add di,32                ;下一个字位置起点
      add bx,24      ;取下一个字字模地址
      pop cx
      loop zz

      mov ah,1h      ;等待键盘输入 结束程序
      int 21h

      mov ax,4c00h
      int 21h
code ends
end start      等待大家 给点帮助

附件是 代码 和 程序

:'(:'(:Q:Q
附件已改正

额... 程序改了 s1: 下边有个 push di

再到后边 loop s2下边有个 pop di
不然 跑行显示不出字 问题算是解决了吧 如果换个DOS 环境也算得话
不知道为啥 换图那个 我电脑自带的 DOS 就能用 这个却不行 我又安了一个DOSBox0.74dos模拟器.exe
那里能运行 不过 我系统原代能运行的 他却不能运行了 还真让人无语 这个只能打出九个字 "欢迎使用汇编贪吃蛇"
页: [1]
查看完整版本: 汇编新手求助