题目

定义宏指令MOVE,使它能将N个字符从一个字符区传送到另一个字符区。 如:N EQU 25 AAA DB ‘ABCDEFGHIJKLMN1234567890’
BBB DB N DUP(?)
则:宏指令 MOVE AAA,N,BBB将AAA中的N个字符传送到BBB中。

思路

  1. 简单两个字符串相移动就好。c = a,b = c,内存不能直接通过mov转移。
  2. 注意使用宏汇编,宏汇编可以参考p226页。

效果图

第一个串是AAA,第二个串是BBB

实现代码

写法一

MOVE MACRO ADDRESS1,N,ADDRESS2
    MOV SI,OFFSET ADDRESS1
    MOV DI,OFFSET ADDRESS2
    MOV CX,N
    CLD
    REP MOVSB
    ENDM
DATA SEGMENT
    N EQU 25
    STRING1 DB "ABCDEFGHIJKLMN1234567890"
    STRING2 DB N DUP(?)
DATA ENDS
CODE SEGMENT
    ASSUME CS:CODE,DS:DATA
START:
    MOV AX,DATA
    MOV DS,AX
    MOV ES,AX
    MOVE STRING1,N,STRING2
    MOV AX,4C00H
    INT 21H
CODE ENDS
END START

写法二

.model small
.data
n equ 25
src db 'ABCDEFGHIJKLMN1234567890'
dst db n dup(?)
.code
start:

move macro array1,n,array2
mov si,0
mov cx,n
lop:mov al,array1[si]
mov array2[si],al
inc si
loop lop
endm

mov ax,@data
mov ds,ax

move src,5,dst

mov ax,4c00h
int 21h

end start

实现效果