Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Assembly 访问数组的索引_Assembly_Masm - Fatal编程技术网

Assembly 访问数组的索引

Assembly 访问数组的索引,assembly,masm,Assembly,Masm,我不熟悉汇编语言,我的课程是基于MASM的。我的目标是从用户输入中获取数组的索引 .data myDates BYTE 1,2,3,4,5,6,7,8,9,10,11,12 .code main PROC Month: mov edi, ecx ; edi = ecx copy counter mov edx, OFFSET disMonth ; edx = disMonth call WriteString ; writ

我不熟悉汇编语言,我的课程是基于MASM的。我的目标是从用户输入中获取数组的索引

.data
myDates BYTE 1,2,3,4,5,6,7,8,9,10,11,12

.code
main PROC

Month:
mov edi, ecx                ; edi = ecx copy counter 

mov edx, OFFSET disMonth        ; edx = disMonth
call WriteString            ; write ax
call ReadInt                ; eax = user input

cmp eax, 12             ; no, is eax > 12
JA  ErrorMonth              ; yes, jmp to ErrorMonth
cmp eax, 0              ; no, is eax > 0
JA CalMonth             ; yes, jmp to CalMonth

ErrorMonth:
mov edx, OFFSET errMsg              ; edx = errMsg
call WriteString            ; display edx
jmp Month               ; jmp back to Month

CalMonth:
                    ; calculating (m + 9) % 12
add eax, 9              ; eax += 9
mov edx, 0              ; edx = 0
mov ecx, 12             ; ecx = 12
div ecx                 ; eax = Q & edx = R

mov ebx, edx                ; ebx = edx *Month Storage*



Day:
mov edx, OFFSET disDay              ; edx = disDay
call WriteString            ; write edx
call ReadInt                ; eax = user input

mov ebp, eax                ; ebp = eax *Day Storage*

movzx eax, monthDate[ebx - 1]
call WriteInt

cmp ebp, eax                ; is ebp > eax
JA ErrorDay             ; jmp to ErrorDay
jmp Year                ; jmp to Year
如果出于某种原因,ebx==12,则输出为9而不是12。但是当我用11替换ebx-1时,它会像应该的那样打印12。我有什么遗漏吗?

如:

这是因为我使用的答案是在
CalMonth
之后,这就是为什么答案是9


我得了12分。显示例程的其余部分,即获取用户输入并将其从ASCII转换为十进制,以及用于打印结果的例程。@Gunner我刚刚在代码的其余部分添加了我的脚本。对不起,我只是在用收银机。硬件要求我只使用寄存器。有一个视图在.data中声明了更多的数据,但它们只是字符串。@Gunner,我知道我做错了什么。这是因为我使用的答案是在
CalMonth
之后,这就是为什么答案是9。