После кода не работаетКак проверить данное число является положительным или отрицательным в i386 ассемблере
cmp ax, 0 jl NegativeNumber ;jump to negative statements
test ax , 0x80 ;to compare sign bit. but it doesn't work
Ассемблер не перескакивает к процедуре NegativeNumber, хотя введенный номер отрицательный.
Ниже мой фактический код
section .data
str1:db 10,13, 'Enter the number'
str1len equ 19
str2: db 10,13, 'The number is positive'
str2len equ 22
str3 : db 10, 13, 'The number is negative'
str3len equ 22
section .bss
num resw 1
cbuff resw 1
global _start
section .text
_start:
%macro sys_read 2
mov rax,0
mov rdi,0
mov rsi,%1
mov rdx,%2
syscall
%endmacro
%macro sys_write 2
mov rax,1
mov rdi,1
mov rsi,%1
mov rdx,%2
syscall
%endmacro
call GetNumber
GetNumber:
sys_write str1, str1len
sys_read cbuff , 1
mov ax , [cbuff]
cmp ax , 0h
jl NumberNegative
sys_write str2, str2len
ret
NumberNegative:
sys_write str3, str3len
ret
Есть ли другой способ определить данное число является положительным или отрицательным без использования флагов? Я что-то делаю неправильно? BTW Я использую NASM на Linux ubuntu.
Что такое 'as'? Вы имели в виду 'ax'? Кроме того, если вы имеете дело с 16-битными номерами, вы должны проверить бит 15, а не бит 7 (или просто сделать «test ax, ax',' js Negative'). – Michael
Да. Сожалею. Его топор. Теперь я исправил вопрос. Хорошо, не могли бы вы рассказать мне, как я могу проверить 15 бит? Спасибо – MCCshreyas
2^15 = 0x8000, используйте это. –