Assembly 在程序集中创建记录

Assembly 在程序集中创建记录,assembly,x86,Assembly,X86,在工作了几个小时后,我完成了程序,它将记录作为输入,计算总数和平均数,并将其存储在记录中 Records DW 01, 12, 60, 54, 57, 00, 00 DW 02, 11, 70, 67, 77, 00, 00 DW 03, 11, 55, 60, 65, 00, 00 DW 04, 12, 75, 66, 83, 00, 00 DW 05, 12, 49, 59

在工作了几个小时后,我完成了程序,它将记录作为输入,计算总数和平均数,并将其存储在记录中

Records    DW    01, 12, 60, 54, 57, 00, 00         
        DW    02, 11, 70, 67, 77, 00, 00
        DW    03, 11, 55, 60, 65, 00, 00 
        DW    04, 12, 75, 66, 83, 00, 00
        DW    05, 12, 49, 59, 69, 00, 00    
;field 1: roll, field 2: age, field 3-5: marks, field 6: total, field 7: average

这是我的密码

main    PROC
    .STARTUP
 
    mov    cx, No_Records
    sub    bx, bx 
    mov    dx,0
     

loop_1:  
    call   the_input
    mov    Records[bx+4],dx
    sub    ax,ax
    sub    dx,dx
    call   the_input
    mov    Records[bx+6],dx
    sub    ax,ax
    sub    dx,dx  
    call   the_input
    mov    Records[bx+8],dx
    sub    ax,ax
    sub    dx,dx    
    
    add    ax, Records[bx+4]
    add    ax, Records[bx+6]
    add    ax, Records[bx+8]
    mov    Records[bx+10], ax
    div    Subjects
    sub    ah, ah
    mov    Records[bx+12], ax
    add    bx, Bytes_Record
    loop    loop_1
    
    mov    cx, No_Records
    sub    bx, bx
    sub    dx, dx   

                       
                           
Repeat2:

        lea    dx, nwln      
        mov     ah, 09h
        int     21h
    
        lea    dx, Output_Msg1     
        mov     ah, 09h
        int     21h


        pusha                    
        mov    ax, Records[bx]     
        div     ten
        mov     bx, ax         
        mov     dl, al
        add     dl, 30h
        mov     ah, 02h
        int     21h
        mov     dl, bh          
        add     dl, 30h
        mov     ah, 02h
        int     21h    
        popa                


                       
        lea    dx, Output_Msg2     
        mov     ah, 09h
        int     21h
    
        pusha               
        mov    ax, Records[bx+10] ;to print total     
        div     hun
        mov     bx, ax          
        mov     dl, al
        add     dl, 30h
        mov     ah, 02h
        int     21h
        mov     ah, 0
        mov     al, bh
        div     ten 
        mov     bx, ax          
        mov     dl, al
        add     dl, 30h
        mov     ah, 02h
        int     21h  
        mov     dl, bh          
        add     dl, 30h
        mov     ah, 02h
        int     21h    
        popa                ; restore all register values

                                             
        lea    dx, Output_Msg3     
        mov     ah, 09h
        int     21h            
    
    
        pusha               
        mov    ax, Records[bx+12]     ; to print average
        div     ten
        mov     bx, ax          
        mov     dl, al
        add     dl, 30h
        mov     ah, 02h
        int     21h
        mov     dl, bh          
        add     dl, 30h
        mov     ah, 02h
        int     21h    
        popa                ; restore all register values

        lea    dx, nwln      
        mov     ah, 09h
        int     21h
    
        add    bx, Bytes_Record     ; to point bx to next record
       
        loop    Repeat2
    
;    .EXIT
     mov     ah ,4ch
        mov     al ,0
int     21h

main    ENDP       
                
the_input PROC
    scanNum:
      
      mov ah, 01h
      int 21h

      cmp al, 13   ; Check if user pressed ENTER KEY
      je  done 

      mov ah, 0  
      sub al, 48   ; ASCII to DECIMAL

      mov dl, al
      mov al, dh   ; Store the previous value in AL

      mul ten       ; multiply the previous value with 10

      add al, dl
      mov dh, al   ; previous value + new value ( after previous value is multiplyed with 10 )

      jmp scanNum
      
Done:
     ret
the_input endp

但我在这里面临的问题是,尽管它需要用户的输入,它没有将其存储在记录中我很想知道我在哪里犯了错误。

不确定您的问题是什么,但最后的
ret4
看起来非常可疑,因为您没有传递任何参数。一个真正好的开始是更好地记录您的子程序。他们把参数放在什么寄存器中,把返回值放在哪里,修改什么寄存器或内存?这是一大堆需要排序的代码。你能把你的问题降到最低限度吗?