Мой ассемблерный код "Multiply" не работает? - PullRequest
0 голосов
/ 25 января 2020

это мой ассемблерный код. это не работает .. Я пытался написать это по-другому, но это дает мне другие ошибки, я использую emu8086 ..... на первой странице будет 3 страницы (1,2,3), и вы должны выбрать, какую страницу.

1- исследование 2-экзамен 3-выход

  1. исследование: выучите таблицу умножения от 0-9
  2. экзамен: вопросы о мульт от 0-9
  3. выход из викторины

и после финала sh викторина будет отмечена.

multi-segment executable file template.

data segment                                      
    firstpage db "welcome to learn  math ",10,13,"create by:saad ",10,13,"1.study",10,13,"2.exam",10,13,"3.exit" ,10,13,"$"
    q1 db "2*1=$"
    q2 db "2*2=$"
    q3 db "2*3=$"
    q4 db "2*4=$"
    q5  db "2*5=$"  
  std1 db "2*1=1 $"
  std2 db "2*2=4 $"
  std3 db "2*3=6 $"
  std4 db "2*4=8 $"
  std5 db "2*5=10 $"
  nl    db ,10,13,"$"
  mark0 db "your mark us:0 $"
  mark1 db "your mark us:20 $"
  mark2 db "your mark us:40 $"
  mark3 db "your mark us:60 $"
  mark4 db "your mark us:80 $"
  mark5 db "your mark us:100 $"
count db 0
ends

stack segment
    dw   128  dup(0)
ends

code segment
start:

    mov ax, data
    mov dx, ax                                                          
    lea dx, firstpage
    mov ah, 9
    int 21h          
    mov ah,7
    int 21h  
    cmp al,3
    je t1


    t1: mov ax,3
    int 21h
    lea dx,std1
    int 21h
    mov ah,7
    int 21h
    lea dx ,nl
    mov ah,9
    int 21h    
       lea dx,std2
    int 21h
    mov ah,7
    int 21h
    lea dx ,nl
    mov ah,9
    int 21h
       lea dx,std3
    int 21h
    mov ah,7
    int 21h
    lea dx ,nl
    mov ah,9
    int 21h
       lea dx,std4
    int 21h
    mov ah,7
    int 21h
    lea dx ,nl
    mov ah,9
    int 21h
       lea dx,std5
    int 21h
    mov ah,7
    int 21h
    lea dx ,nl
    mov ah,9
    int 21h
    mov ah,7
    int 21h
    lea dx ,q1
    mov ah,9
    int 21h
    lea dx ,nl
    mov ah ,9
    int 21h
     lea dx ,q2
    mov ah,9
    int 21h
    lea dx ,nl
    mov ah ,9
    int 21h
     lea dx ,q3
    mov ah,9
    int 21h
    lea dx ,nl
    mov ah ,9
    int 21h
     lea dx ,q4
    mov ah,9
    int 21h
    lea dx ,nl
    mov ah ,9
    int 21h
     lea dx ,q5
    mov ah,9
    int 21h
    lea dx ,nl
    mov ah ,9
    int 21h
    mov ah,1
    int 21h
    cmp count,0
    je mark0
    cmp count,1
    je mark1
    cmp count, 2
    je mark2
     cmp count,3
    je mark3
     cmp count,4
    je mark4
     cmp count,5
    je mark5

      mark0:lea dx,mark0
    mov ah,9
    int 21h
    jmp soof
      mark1:lea dx,mark1
    mov ah,9
    int 21h
    jmp soof
      mark2:lea dx,mark2
    mov ah,9
    int 21h
    jmp soof
      mark3:lea dx,mark3
    mov ah,9
    int 21h
    jmp soof
      mark4:lea dx,mark4
    mov ah,9
    int 21h
    jmp soof
      mark5:lea dx,mark5
    mov ah,9
    int 21h
    jmp soof









    mov ax, 4c00h
    int 21h    
ends

end start

1 Ответ

3 голосов
/ 25 января 2020

Список ошибок:

nl    db ,10,13,"$"

Дополнительная запятая переводит на дополнительный ноль. Вы получите db 0,10,13,"$"


mov ax, data
mov dx, ax

Чтобы настроить регистры сегментов, необходимо написать:

mov ax, @data
mov ds, ax      ; Do read carefully: DS

mov ah,7
int 21h  
cmp al,3
je t1

Когда пользователь нажимает клавишу «3», вы получите код 51 в AL.
Следовательно, ваш чек должен быть cmp al, 51 или лучше cmp al, '3'.


t1: mov ax,3      <<<<<< This sets AH=0
int 21h
lea dx,std1
int 21h
mov ah,7
int 21h

Поскольку AH=0 является функцией ProgramExit, ни один из следующих кодов не будет выполнен.


mov ah,7
int 21h  

В вашей программе их много, и вы не используете результат из AL. Если это ваши попытки отладки, вы должны были удалить их до публикации на этом форуме. Теперь это очень запутанно для всех, кто читает вашу программу.

...