在程序集中来回移动字符串

问题描述:

给定一个具有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.

如果有人帮我解决这个问题,我将不胜感激。

+0

您的意思是在 “添加SI,-2” 的一个减? – 2012-03-07 17:58:43

+0

@ 500-InternalServerError:我知道它错了,但我无法做任何其他工作。 – Quixotic 2012-03-07 18:02:52

这工作:

; 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