当前位置: 首页 > 知识库问答 >
问题:

mov啊,01H int16h,怎么用它来改变蛇的方向

呼延臻
2023-03-14
.model small
.data
var db  '@', '$'

delaytime db 10
total db 0
col db 40
row db 12
.stack 100h
.code
delay proc
    mov ah, 00
    int 1Ah
    mov bx, dx

jmp_delay:
    int 1Ah
    sub dx, bx
    cmp dl, delaytime
    jl jmp_delay
    ret

delay endp

lefty proc
dec col
cmp col, 0
jle sn

leftyie:
mov dl , col
mov dh , row
xor bh, bh
mov ah, 02h
int 10h
ret 

sn:
mov col, 79
jmp leftyie
lefty endp



righty proc
inc col
cmp col,79
jg zero

rightyie:
mov dl,col
mov dh,row
xor bh, bh
mov ah, 02h
int 10h
ret 

zero: 
mov col,0
jmp rightyie
righty endp



upy proc
dec row
cmp row, 0
jl upzero

uptie:
mov dl,col
mov dh,row
xor bh, bh
mov ah, 02h
ret

upzero:
mov row,24
jmp uptie

upy endp


downy proc
inc row
cmp row, 24
jg gozero

downty: 
mov dl,col
mov dh,row
xor bh, bh
 mov ah, 02h
int 10h
ret 

gozero:
mov row,0
jmp downty
downy endp

video proc
mov al, 03h ;set video mode
  mov ah, 00h
  int 10h
  ret
 video endp

start proc
     ;starting coordinates
   mov dh, 12 ;row
   mov dl, 40 ;column
   xor bh, bh
   mov ah, 02h
   int 10h 
   ret
start endp

dashclear proc
mov ax, 0600h
mov bh, 07h
xor cx, cx
mov dx, 184fh
int 10h
ret
dashclear endp

getchar proc
mov ah, 00h
int 16h
ret
getchar endp


main  proc
mov ax, @data
mov ds, ax


 call video
 call start
   mov dx, offset var
   mov ah, 09h
       int 21h


 mov cx, 3200h  ;stop cursor blinking
 mov ah, 01h
 int 10h

call start
getinput:

call getchar ;get character


direct_change:
cmp ah, 72
je w 
cmp ah, 80
je s 
cmp ah, 75
je a 
cmp ah, 77
je d

cmp al, 119
je w 
cmp al, 115
je s 
cmp al, 97
je a 
cmp al, 100
je d

cmp al, 119
jne rak 
cmp al, 115
jne rak
cmp al, 97
jne rak 
cmp al, 100
jne rak


a:
call delay
call dashclear
call lefty
mov dx, offset var
mov ah, 09h
int 21h



jmp a


s:
call delay
call dashclear
call downy
mov dx, offset var
mov ah, 09h
int 21h

jmp s


d:
call delay
call dashclear

call righty
mov dx, offset var
mov ah, 09h
int 21h

jmp d


w:
call delay
call dashclear

call upy
int 10h
mov dx, offset var
mov ah, 09h
int 21h

jmp w

rak:
jmp getinput

main endp
end main

我有一个用w,a,s,d移动一个字符的代码,我怎么用mov ah,01h,int16h,这样我就可以移动字符,而字符自己移动,如果我不按任何键改变它的方向。

我想应该有一个计时器,当计时器结束时,当用户没有按下任何东西时,角色应该继续往上一个键被按下的方向走,然后如果用户按下任何控制按钮,它应该改变方向

共有1个答案

鲜于星波
2023-03-14

我想应该有一个计时器,当计时器结束时,当用户没有按下任何东西时,角色应该继续往上一个键被按下的方向走,然后如果用户按下任何控制按钮,它应该改变方向

这正是要走的路。你的角色会更新它的位置,例如,在系统计时器的每一个滴答声。如果在PC兼容(或模拟器)上为真实模式MS DOS编程,就像我假设您正在做的那样,您可以使用hlt指令等待出现中断。但是,不要发出任何CLI指令,否则您的程序将永远卡在HLT指令中。

Do forever
  HLT  ;waits until an interrupt triggers. Usually, every 55ms on IBM PC
  if key pressed
    update direction
  EndIf
  Update character
EndDo
 类似资料:
  • rank ▲ ✰ vote url 16 789 431 938 url 怎么用引用来改变一个变量? Python的文档对参数传递的是值还是引用没有明确说明,下面的代码没有改变值Original class PassByReference: def __init__(self): self.variable = 'Original' self.Change(

  • 鼠鼠参加了招商银行信用卡中心软开实习的线下二面,自己菜也是真的菜,题也是真的难。 先给目前面试的几家公司面试题难度分个档: 独一档:招商银行卡中心(一面专注分布式,二面专注Redis和框架的各种刁钻问题) 第二档:阿里CTO(面试官说从基础得开始问,指从基本类型的数据存储开始问,因为是Java岗所以说自己对操作系统不熟,但还是被不停地追问操作系统,挂得非常快) 第三档:其他 招行卡中心二面可能也是

  • AMH的SSL证书怎么弄啊?AMH怎么填写SSL证书啊? AMH的SSL证书怎么弄啊?AMH怎么填写SSL证书啊?

  • Android Studio给了我一个弯弯曲曲的说法,我应该/可以把它变成一个lambda。我刚回到我的Android系统。 这是弯曲的“对象:PopupMenu.OnMenuItemClickListener”

  • 我试图在我的程序中实现加密,但在方法上遇到了一些困难。我有一个未加密的数组,它应该保持未加密,另一个数组我想加密。然而,当我调用这个方法时,它会加密两个数组。 我无法发现问题,因为在我的理解中,我返回加密数据并将其分配给另一个数组,但由于某种原因,我传递的数组也发生了变化。 这是输出 提前感谢您的帮助!

  • 问题内容: 我正在做一个猜谜游戏的AI部分。我希望AI从此列表中选择一个随机字母。我将其设置为一组,这样我就可以轻松地从列表中删除字母,因为它们在游戏中会被猜测出来,因此不再可供再次猜测。 它说对象不可索引。我该如何解决? 问题答案: 注意(2020年10月): 从v3.9开始,Python正式弃用 了集合,官方指导是在传入之前将集合显式转换为列表或元组。 文档:https : //docs.py