更新时间:2023-11-02 08:00:52
操作数类型不匹配错误来自尝试移动
mov al, readchar
)mov si, al
)mov al, readchar
)mov si, al
)要解决这些问题,您必须考虑下一个数据定义的真正含义.
To solve these issues you have to consider what the next data definitions really represent.
buff label byte
maxchar dw 50
readchar dw 0
name1 db 48 dup(0)
这4行代码一起是DOS输入功能0Ah使用的结构.它期望在第一和第二字段中输入 bytes (字节)!
因此,要摆脱第一个问题,请将其更改为
These 4 lines of code together are the structure that is used by the DOS input function 0Ah. It expects bytes in the 1st and 2nd fields!
So to get rid of the first problem change this into
buff label byte
maxchar db 50
readchar db 0
name1 db 48 dup(0)
要纠正第二个问题,只需编写mov si, ax
,这正是您想要的.
To correct the second problem just write mov si, ax
which is what you intended anyway.
作为奖励,为什么不使用标签 name1 起作用?这将为您节省add ax, 2
指令.
As a bonus, why don't you put the label name1 to work? It will save you the add ax, 2
instruction.
mov ah, 0
mov al, readchar
mov si, ax
mov name1[si], '$'
第二个好处是,您可以使用BX寄存器代替SI并保存另一条指令.
As a second bonus, you could use the BX register in stead of SI and save yet another instruction.
mov bh, 0
mov bl, readchar
mov name1[bx], '$'