给定一个包含25行和80列的矩阵,但其属性为160列 我必须在程序集中编写一个程序来移动四个字母的字符串“Fool”(比如说)来回移动矩阵。
到目前为止我做了什么:
mov bx,0B800H
mov ds, bx
mov si, 1760
mov cx,80
FOOL: add si,-6
mov [si], " "
add si, 2
mov [si], "F"
add si, 2
mov [si], "O"
add si, 2
mov [si], "O"
add si,2
mov [si],"L"
loop FOOL
mov cx, 80
FOOOL: add si,-6
mov [si], "F"
add si, -2
mov [si], "O"
add si, 2
mov [si], "O"
add si,2
mov [si],"L"
add si,2
mov [si], " "
loop FOOOL
mov ah,9
int 21H
但是使用这段代码,当它反转时,最后一个字母出现在第一个字母之前。我是集会的新手,我之前尝试过8085,但这是我第一次尝试8086.
如果有人帮我解决这个问题,我将不胜感激。
答案 0 :(得分:1)
这有效:
; compile with nasm:
; nasm.exe fool.asm -f bin -o fool.com
bits 16
org 100h
mov bx,0B800H
mov ds, bx
mov si, 80*11*2 ; 1760
mov cx, 80+1-5
FOOL:
mov [si], byte " "
add si, 2
mov [si], byte "F"
add si, 2
mov [si], byte "O"
add si, 2
mov [si], byte "O"
add si, 2
mov [si], byte "L"
sub si, 3*2
call delay
loop FOOL
sub si, 1*2
mov cx, 80+1-5
FOOOL:
mov [si], byte "F"
add si, 2
mov [si], byte "O"
add si, 2
mov [si], byte "O"
add si, 2
mov [si], byte "L"
add si, 2
mov [si], byte " "
sub si, 5*2
call delay
loop FOOOL
mov ax, 4c00h
int 21h
delay:
pusha
push ds
mov ax, 0
mov ds, ax
mov bx, [46ch]
d0:
mov ax, [46ch]
cmp ax, bx
je d0 ; wait for another timer tick (once in ~55 ms)
pop ds
popa
ret