我正在开展一个更大的项目,但我仍然坚持使用字符串操作。我的汇编文件包括数学协处理器操作(它用“FINIT”启动协处理器),但我认为它根本不应该干扰。 基本上,我有一些长度为50字节的字符串:
$s db 50 dup (?), '$'
_cte_14 db "hello world", '$', 39 dup (?)
我需要将变量“_cte_14”中存储的值赋给变量“$ s” 我试图使用寄存器临时存储值,如下所示:
mov cx, _cte_14
mov $s, cx
但我得到“操作数类型不匹配”错误。
由于我知道AX,BX,CX,DX寄存器只保存16位,我想也许我需要使用第一个字符串字符的内存地址,所以我试过了:
mov bx, offset _cte_14
mov $s, bx
但出现同样的错误。
我正在使用TASM来编译x86处理器。什么是实现这一目标的正确方法?
提前多多感谢。
答案 0 :(得分:1)
在循环中复制字符的示例:
s db 51 dup ('$')
_cte_14 db "hello world"
len = ($ - _cte_14) ; (current location - offset _cte_14)
40 dup ('$')
mov si, offset _cte_14 ; get source offset
mov di, offset s ; get destination offset
mov cl, len ; length of the string
P1:
mov al, [si] ; get byte from DS:SI
mov [di], al ; store byte to DS:DI
dec cl ; decrease counter, set zero flag if zero
jnz P1 ; jump if zero flag is not set
- 使用字符串指令和重复指令前缀的变化:
mov si, offset _cte_14
mov di, offset s
mov cx, len ; length of the string
cld ; clear direction flag
rep movsb ; copy from DS:SI to ES:DI, increase SI+DI, decrease CX, repeat CX times