поскольку я до сих пор не знаю метода для написания и компиляции программ связанных списков x-86 через ide (насколько мне известно, emu8086 не поддерживает структуру связанного списка) Я написал это в блокноте и скомпилировал с помощью dosbox код компилируется без ошибок, и когда я запускаю через g4e (адрес mov ah, 4ch Мне нужно ввести число, и программа застревает
вот мой код
node struc
value db ?
next dw ?
node ends
dseg segment
list node <'1',3h>
ORG 3h
node <'3',6h>
ORG 6h
node <'7',9h>
ORG 9h
node <'9',-1>
searchInt db 0
counter1 db 0
welcome db 'Please enter a number between 1-10$'
dseg ends
sseg segment stack
db 10h dup (?)
sseg ends
cseg segment
assume cs:cseg,ds:dseg,ss:sseg
start:
mov ax,dseg
mov ds,ax
lea si,list
mov dx,offset welcome
call print
userInput:
xor ax,ax
mov ah, 1
int 21h
cmp al,30h
jb userInput
cmp al,39h
ja userInput
jmp searching
searching:
lea si,list
cmp [si].value,al
je counter
cmp [si].value,-1
je sof
mov si,[si].next
jmp searching
counter:
inc counter1
cmp [si].value,-1
je sof
jmp searching
print proc ;procedure for printing messages
mov ah,9h
int 21h
MOV dl, 10
MOV ah, 02h
INT 21h
MOV dl, 13
MOV ah, 02h
int 21h ;start a new line
ret
print endp
sof:
mov ah,4ch
int 21h
cseg ends
end start
может кто-нибудь указать, в чем моя проблема?
спасибо, я уже удалил эту строку, так как в начале я уже написал эту строку. теперь происходит что-то странное, время от времени он внезапно принимает ввод пользователя, что делает этот код очень странным
Не удаляйте его, а перемещайте непосредственно перед первым jmp searching. Следующей проблемой являются два cmp [si].value,-1, которые должны быть cmp [si].next,-1.





Проблема в
lea si,list. в началеsearching. Это всегда устанавливаетsiв начало списка. и отменяетmov si,[si].next.