首页 > 解决方案 > 偏移量的汇编语言无效操作数

问题描述

嗨,我是一名计算机科学专业的学生,​​正在编写一个代码来输入 20 个姓名和等级,并用与字母等级相关的颜色显示它们。我遇到了两个类似的错误,想知道是否有人可以向我解释这个问题以及如何解决它。

这是代码:

INCLUDE Irvine32.inc



Student STRUCT
    myName BYTE 26 DUP(00h)
    myGrade BYTE 26 DUP(00h)
Student ENDS


.data
myClass Student 20 DUP(<>)
myNumber BYTE 3 DUP(00h)
nameQuestion BYTE "What is your name?",0dh,0ah,0
gradeQuestion BYTE "Please enter ",0
grade2Question BYTE "'s grade.",0dh,0ah,0
myName BYTE 26 DUP(00h)
myGrade BYTE 26 DUP(00h)
linebreak BYTE 0dh,0ah,0
comma BYTE ","
space BYTE " "
counter BYTE 0
.code
main PROC

R1: call Clrscr

    mov edx,OFFSET nameQuestion
    call WriteString

    mov edx,OFFSET myName
    mov ECX,26

    mov eax, SIZEOF Student
    mul myNumber
    mov esi,eax
    lea edx, (Student PTR myClass[esi]).myName 

    call ReadString

    cmp eax, 00h
    JE R2
    call Clrscr


R3: mov edx,OFFSET gradeQuestion
    call WriteString

    mov edx,OFFSET myName
    call WriteString

    mov edx,OFFSET grade2Question
    call WriteString

    mov edx,OFFSET myGrade
    mov ECX,26

    mov eax, SIZEOF Student
    mul myNumber
    mov esi,eax
    lea edx, (Student PTR myClass[esi]).myGrade

    call ReadString
    inc myNumber

L1: CMP myGrade, "A"
    JE R5
    CMP myGrade, "B"
    JE R5
    CMP myGrade, "C"
    JE R5
    CMP myGrade, "D"
    JE R5
    CMP myGrade, "F"
    JE R5
R5: inc counter
    CMP counter,20
    JNE R1  

R4: call Clrscr

    mov dh,3
    mov dl,5
    call Gotoxy

    mov eax, SIZEOF myClass
    mul counter
    mov esi, eax
91  lea edx, OFFSET (Student PTR myClass[esi]). myName
    call WriteString


J1: mov eax, 07h
    CMP myGrade, "D"
    JNE J2
    mov eax, 0Eh
J2: CMP myGrade, "F"
    JNE J3
    mov eax, 04h
J3: Call SetTextColor

    mov dh,3
    mov dl,32
    call Gotoxy


    mov eax, SIZEOF myClass
    mul counter
    mov esi, eax
112 lea edx, OFFSET (Student PTR myClass[esi]). myGrade
    call WriteString

    mov edx, OFFSET linebreak
    call WriteString

    mov eax, 07h
    Call SetTextColor

    call WaitMsg
    jmp R1
R2: exit
main ENDP

END main    

这是我收到的错误消息:

1>..\Code.asm(91): error A2071: initializer magnitude too large for specified size
1>..\Code.asm(91): error A2098: invalid operand for OFFSET
1>..\Code.asm(112): error A2098: invalid operand for OFFSET

标签: assemblyx86syntax-errormasmirvine32

解决方案


推荐阅读