[英]Why doesn't jl work in asm x86 when by my calculations it should
我是組裝新手,不明白為什么jl decrement_year
和jl decrement_month
似乎不起作用...我正在為 asm x86 中的 uni 做功課,當將參考文獻與我的 output 進行比較時,答案是正確的或大 1 (僅當我不需要使用跳躍時它們才是正確的)。 這只是程序的一部分,結果應該是從現在(日/月/年)計算的年齡向量和生日列表(日/月/年)。
mov edx, dword 0
mov ebx, dword 1
get_all_ages1:
mov eax, dword [esi + my_date.day] ; eax = present.day
sub eax, dword [edi + edx*my_date_size + my_date.day] ; eax -= dates[idx].day
test eax, eax
mov eax, dword [esi + my_date.month] ; eax = present.month
jl decrement_month ; cmp < 0 => eax -= 1
get_all_ages2:
sub eax, dword [edi + edx*my_date_size + my_date.month] ; eax -= dates[idx].month
test eax, eax
mov eax, dword [esi + my_date.year] ; eax = present.year
jl decrement_year ; cmp < 0 => eax -= 1
get_all_ages3:
sub eax, dword [edi + edx*my_date_size + my_date.year] ; eax -= dates[idx].year
test eax, eax
jle set_age_0 ; if present.year - dates.year <= 0 put 0
mov [ecx + edx*4], dword eax ; else put eax
jmp decrement_idx
decrement_idx:
add edx, 1
cmp edx, [ebp + 8]
jl get_all_ages1 ; if idx < len repeat
jmp stop ; end program
; here I can put any code I don't want used by accident
set_age_0:
mov [ecx + edx*4], dword 0 ; put 0 at all_ages[idx]
jmp decrement_idx
decrement_month:
sub eax, ebx
jmp get_all_ages2
decrement_year:
sub eax, ebx
jmp get_all_ages3
mov eax, dword [esi + my_date.day] mov eax, dword [esi + my_date.month] mov eax, dword [esi + my_date.year]
sub eax, dword [edi + edx*my_date_size + my_date.day] sub eax, dword [edi + edx*my_date_size + my_date.month] sub eax, dword [edi + edx*my_date_size + my_date.year]
這些怎么可能都是雙字? 您的my_date結構的大小可能是 12 嗎? 使用 12 作為比例索引如何工作?
假設my_date_size == 4
:
movzx eax, byte [esi + my_date.day]
movzx ebx, byte [edi + edx*my_date_size + my_date.day]
sub eax, ebx
...
movzx eax, byte [esi + my_date.month]
movzx ebx, byte [edi + edx*my_date_size + my_date.month]
sub eax, ebx
...
movzx eax, word [esi + my_date.year]
movzx ebx, word [edi + edx*my_date_size + my_date.year]
sub eax, ebx
...
decrement_month:
dec eax
jmp get_all_ages2
decrement_year:
dec eax
jmp get_all_ages3
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.