题目
定义宏指令MOVE,使它能将N个字符从一个字符区传送到另一个字符区。 如:N EQU 25 AAA DB ‘ABCDEFGHIJKLMN1234567890’
BBB DB N DUP(?)
则:宏指令 MOVE AAA,N,BBB将AAA中的N个字符传送到BBB中。
思路
- 简单两个字符串相移动就好。c = a,b = c,内存不能直接通过mov转移。
- 注意使用宏汇编,宏汇编可以参考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