因此,该项目基本上是关于编码一个计算器,可以使用4个基本操作:加,减,乘,除,在汇编语言。我很抱歉,但注解是用法语写的,我想你不会需要他们来理解代码无论如何。
可能有帮助:我的老师说我报告了一个不属于它所在位置的堆栈段。当我运行代码时,我得到了这些错误:
(56) error A2006: undefined symbol : scan_num
(89) error A2006: undefined symbol : scan_num
(100)error A2006: undefined symbol : do_plus
(103)error A2006: undefined symbol : do_minus
(106) error A2006: undefined symbol : do_mult
(109) error A2006: undefined symbol : do_div
(128) error A2006: undefined symbol : main
下面是我的代码:
SSEG SEGMENT STACK
DB 32 DUP("STACK---")
SSEG ENDS
;===========================================================code segment
assume cs:cseg, ds:cseg, es:cseg
cseg segment
org 100h
;----------
name "CALCULATRICE"
PUTC MACRO char
PUSH AX
MOV AL,char
MOV AH, 0Eh
INT 10h
POP AX
ENDM
jmp start
;------------- Zone de donnée
msg0 db "BELLAL MOHAMED BUT1 2021/2022",0Dh,0Ah
db "CALCULATOR3000 gerant les quatres opérations basiques ( + - * / )",0Dh,0Ah,"$"
msg1 db 0Dh,0Ah,0Dh,0Ah, "Entrer le premier terme de l'opération: $"
msg2 db "Choisissez l'opérateur à utiliser: + - * / : $"
msg3 db "Entrer le second terme de l'opération: $"
msg4 db 0Dh, 0Ah,"Le résultat est: $"
msg5 db 0Dh, 0Ah," ",0Dh,0Ah,"$"
err1 db "Saisie incorrecte",0Dh,0Ah,"$"
smth db "Et .... $"
opr db "?" ; variable contenant l'opérateur
num1 dw ? ; variable contenant le premier terme de l'opération
num2 dw ? ; variable contenant le deuxième terme de l'opération
;--------------- PROGRAMME
start:
mov dx, offset msg0
mov ah, 9
int 21h
lea dx, msg1
mov ah, 09h ; afficher le premier message
int 21h
; récupérer un nombre saisi par l'utilisateur et on le stock dans
; le registre CX
call scan_num
mov num1, cx ; stocker le nombre dans num1
; nouvelle ligne
putc 0Dh
putc 0Ah
lea dx, msg2
mov ah, 09h ; affiche le deuxième message
int 21h
; récupérer l'opérateur
mov ah, 1
int 21h
mov opr, al
; nouvelle ligne
putc 0Dh
putc 0Ah
cmp opr, "q" ; q pour quitter
je exit
cmp opr, "*"
jb wrong_opr
cmp opr, "/"
ja wrong_opr
lea dx, msg3
mov ah, 09h
int 21h
call scan_num
mov num2, cx
lea dx, msg4
mov ah, 09h
int 21h
;------------- CALCULER
cmp opr, "+"
je do_plus
cmp opr, "-"
je do_minus
cmp opr, "*"
je do_mult
cmp opr, "/"
je do_div
;---------- CAS PAR DEFAUT
wrong_opr:
lea dx, err1
mov ah, 09h
int 21h
exit:
lea dx, msg5
mov ah, 09h
int 21h
mov ah, 0
;---------
cseg ends
end main
1条答案
按热度按时间eblbsuwk1#
如果使用代码标签作为指令操作数,则它还需要存在于代码中的某个地方,在它自己的行后面有一个冒号,或者在汇编程序允许的情况下有一个
proc
语句。您可能已经注意到,在
wrong_opr
中没有看到类似的错误消息,这是因为在源代码中有该标签。您得到了其他标签的错误消息,因为它们不在您的程序中。
现在我会这么做:
然后你可以做下面的事情,我故意用一种次优的方式来写,以使它更容易阅读。
这应该足以消除这些错误。当然,您还必须弄清楚您希望如何完成任务。