在程序集中来回移动字符串
问题描述:
给定一个具有25行80列的矩阵,但其属性为160列 我必须在程序集中编写一个四字母字符串“傻瓜”(比如说)来移动矩阵来回。在程序集中来回移动字符串
我做了什么至今:
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.
如果有人帮我解决这个问题,我将不胜感激。
答
这工作:
; 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
您的意思是在 “添加SI,-2” 的一个减? – 2012-03-07 17:58:43
@ 500-InternalServerError:我知道它错了,但我无法做任何其他工作。 – Quixotic 2012-03-07 18:02:52