tasm: operand type does not match

你。 提交于 2019-11-27 04:54:46

问题


.model small
.stack
.data
    buff label byte
    maxchar dw 50
    readchar dw 0
    name1 db 48 dup(0)
    m1 db 10,13,"enter name: $"
    m2 db 10,13,"your name is: $"
.code
    mov ax, @data
    mov ds, ax
    lea dx, m1
    mov ah, 09
    int 21h
    lea dx, buff
    mov ah, 10
    int 21h


    mov ah,0
    mov al, readchar
    add ax, 2
    mov si, al
    mov buff[si],24H ;ascii code for $ to terminate string
    lea dx, m2
    mov ah, 9
    int 21h
    lea dx, name1
    mov ah, 09
    int 21h

    mov ah, 4ch
    int 21h
end

回答1:


The operand type does not match error comes from trying to move

  • a word sized variable into a byte sized register (mov al, readchar)
  • a byte sized register into a word sized register (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)

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)

To correct the second problem just write mov si, ax which is what you intended anyway.

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], '$'

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], '$'



回答2:


First mistake:

readchar dw 0
...
mov al, readchar

readchar is defined as WORD ("dw" = "data word", some say "define word". A word has a size of 16 bits. AL is an 8-bit-register. You cannot store a 16-bit word into an 8-bit register.

Second mistake:

mov si, al

SI is a 16-bit register, AL is an 8-bit register. You cannot copy an 8-bit register into a 16-bit register.



来源:https://stackoverflow.com/questions/32169637/tasm-operand-type-does-not-match

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!