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