我的程序集“测验乘法”代码不起作用?

问题描述 投票:-3回答:1

这是我的汇编代码。它不工作..我试图用另一种方式写它,但这给了我其他错误我使用emu8086 .....在第一页中将有3页(1,2,3),您必须选择页面。

1-学习2考试3退出

  1. 研究:将从0-9开始学习乘法表
  2. 检查:关于0-9岁多人的问题
  3. 退出测验

完成测验后,将会有标记。

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
assembly dos x86-16 emu8086
1个回答
0
投票

错误列表:

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”的键时,您将在AL中收到代码51。因此,您的支票应为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中的结果。如果这些是您的调试工作,则应该删除它们在此论坛上的[[之前。现在,对于任何阅读您的程序的人来说,这都很令人困惑。

© www.soinside.com 2019 - 2024. All rights reserved.