Assembly 访问数组的索引
我不熟悉汇编语言,我的课程是基于MASM的。我的目标是从用户输入中获取数组的索引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
.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。