Сборка проекта - Как добавить метку в код сборки "Изучение гласных букв"? - PullRequest
2 голосов
/ 25 января 2020

Это мой небольшой ассемблерный код проекта о "получении гласных букв". Это работает, но оценка не была добавлена, когда вопросы закончились. 5 вопросов и самое позднее должны добавить оценку, но это не добавляет. За каждый правильный ответ будет добавлена ​​отметка.

страница 1: учеба
страница 2: экзамен
страница 3: выход

Так же, как это работает.

; multi-segment executable file template.

data segment                                                                                                                         
 firstpage db "learning Vowel letters e,o,a,i,u",10,13,"create by:alex",10,13,"1.stady",10,13,"2.exam",10,13,"3.exit" ,10,13,"$"
  std1 db "Umbrella  ----> an Umbrella" ,10,13,"$"
  std2 db "bird ----> a bird ",10,13,"$"
  std3 db "Ice cream ----> an Ice cream",10,13," $"
  std4 db "car----> a car ",10,13,"$"  
  std5 db "Orange ---->an Orange",10,13," $"

    qone db "desk ____ desk"   ,10,13,"a) a",10,13,"b) an",10,13,"$"
    qtow db "apple ____apple"   ,10,13,"a) a",10,13,"b) an",10,13,"$"
    qth db "table ____ table"  ,10,13,"a) a",10,13,"b) an",10,13,"$"
    qfo db "egg ____ egg"     ,10,13,"a) a",10,13,"b) an",10,13,"$"
    qfi db "red ____ red"     ,10,13,"a) a",10,13,"b) an",10,13,"$"  

    nl    db 0,10,13,"$"

   markze db "your mark is :0$"
   markone db "your mark is :10$" 
   marktow db "your mark is :40$" 
   markth db "your mark is :60$" 
   markfo db "your mark is :80$" 
   markfi db "your mark is :100$" 

   count db 0

ends

stack segment
    dw   128  dup(0)
ends                                
code segment
start:

    mov ax, data
    mov ds, ax

    lea dx, firstpage
    mov ah, 9
    int 21h           
    mov ah,7
    int 21h
    mov dl,al
    cmp dl,"1" 
    je  t1
    cmp dl,"2"
    je t2 
    cmp dl,"3"
    je soof 

 t1:  mov ax,3
    int 10h


    lea dx,std1
    mov ah,9
    int 21h
    mov ah,7
    int 21h


       lea dx,std2 
    mov ah ,9   
    int 21h
    mov ah,7
    int 21h

       lea dx,std3 
    mov ah,9
    int 21h
    mov ah,7
    int 21h


       lea dx,std4
    mov ah,9
    int 21h
    mov ah,7
    int 21h

       lea dx,std5
    mov ah,9
    int 21h
    mov ah,7
    int 21h   


    lea dx, firstpage
    mov ah, 9
    int 21h           
    mov ah,7
    int 21h



 t2:   mov ax,3
       int 10h

    lea dx ,qone
    mov ah,9
    int 21h 
    lea dx,nl
    mov ah,9
    int 21h
    mov ah,1
    int 21h
     mov ah,7
    int 21h

    mov bl,ah 
    cmp bl,"a"
    je c1 

    cmp bl,"b"
    je c0



       lea dx ,qtow

    mov ah,9
    int 21h 
    lea dx,nl
    mov ah,9
    int 21h
    mov ah,1
    int 21h


    mov bl,ah
    cmp bl,"b"
    je c2 

    cmp bl,"a"
    je c0





       lea dx ,qth
     mov ah,9
    int 21h 
    lea dx,nl
    mov ah,9
    int 21h
    mov ah,1
    int 21h
    mov bl,ah 

    cmp bl,"a"
    je c3

    cmp bl,"b"
    je c0





      lea dx ,qfo
    mov ah,9
    int 21h 

    lea dx,nl
    mov ah,9
    int 21h 

    mov ah,1
    int 21h



   mov bl,ah    
   cmp bl,"b"
   je c4

   cmp bl,"a"
   je c0



       lea dx ,qfi
     mov ah,9
    int 21h 
    lea dx,nl
    mov ah,9
    int 21h
    mov ah,1
    int 21h 

    mov bl,ah
    cmp bl,"a" 
    je c5
    cmp bl,"b"
    je c0  

 c0:
    cmp count,0
    je mark0 

 c1:
    cmp count,1
    je mark1


 c2:
    cmp count, 2
    je mark2

 c3:
    cmp count, 3
    je mark3 

 c4:
     cmp count,4
    je mark4

 c5:
    cmp count,5
    je mark5



 mark0:
       lea dx,markze
       mov ah,9
       int 21h
       jmp soof

 mark1:
       lea dx,markone
       mov ah,9
       int 21h
       jmp soof

 mark2:
       lea dx,marktow
       mov ah,9
       int 21h
       jmp soof 

 mark3:
       lea dx,markth
       mov ah,9
       int 21h
       jmp soof

 mark4:
       lea dx,markfo
       mov ah,9
       int 21h
       jmp soof
 mark5:
       lea dx,markfi
       mov ah,9
       int 21h
       jmp soof 




  soof:  mov ax, 4c00h 
    int 21h    
ends

end start 

1 Ответ

2 голосов
/ 27 января 2020
nl    db 0,10,13,"$"

Я думаю, что ответчик из Мой код "Викторина умножения" не работает? скорее означает, что вы пишете: nl db 10,13,"$" (без нуля / запятой) )


Почему эта версия не работает

Неправильный ввод.

mov ah,1
int 21h
mov ah,7
int 21h
mov bl,ah 

Обе эти функции DOS вводят один символ с клавиатуры. Функция 01h делает это с эхо и функцией 07h без эха .
То, что ни одна из функций не делает, оставляет результат в регистре AH, который вы позже копируете в BL регистр. Результат всегда только в регистре AL . Конечно, вам нужно включить только одну из этих функций.

mov ah, 01h
int 21h
mov bl, al 

Поток программы неправильный.

cmp bl,"a"
je c1
cmp bl,"b"
je c0
lea dx ,qtow
mov ah,9
int 21h

Если пользователь дает правильный ответ (а) к первому вопросу вы переходите на c1 , где вы пытаетесь выставить счет и завершить программу.
Если пользователь дает неправильный ответ (б) на первый вопрос, вы перейти к c0 , где вы пытаетесь присвоить (ноль) балл и завершить программу.
Только если пользователь вводит недопустимые данные, вы задаете ему второй вопрос.
Очевидно, logi c неисправен!

Вам нужно увеличивать переменную count каждый раз, когда был дан правильный ответ. В коде это означает, что вы пропускаете инструкцию inc, если правильный ответ не был дан .

    ...
    mov ah, 01h
    int 21h
    cmp al, "a"     ; Correct answer to 1st question
    jne Q2          ; was not given
    inc count
Q2:
    lea dx, qtow
    mov ah, 09h
    int 21h
    mov ah, 01h
    int 21h
    cmp al, "b"     ; Correct answer to 2nd question
    jne Q3          ; was not given
    inc count
Q3:
    lea dx, qth
    mov ah, 09h
    int 21h
    ...

Часть, которая имеет дело с пятым и последним вопросом, может упасть через код, который будет печатать метку на экране.

    ...
Q5:
    lea dx, qfi
    mov ah, 09h
    int 21h
    mov ah, 01h
    int 21h
    cmp al, "a"     ; Correct answer to 5th question
    jne c0          ; was not given
    inc count
c0:
    ...
...