30/09/2018, 21:04
Viết chương trình nhập 2 số A và B được nhập theo dạng thập phân. In các kết quả ở dạng thập phân: A + B, A – B
Tình hình là có bài này :Viết chương trình nhập 2 số A và B được nhập theo dạng thập phân.
In các kết quả ở dạng thập phân: A + B, A – B.
E code như ở dưới( mấy cái inputDec với outputDec lấy ở trên mạng)
Khi chạy chương trình thì chỉ có một kết quả ra đúng, cái còn lại sai, ko biết bây giờ phải sửa ntn.
Thực sự em cũng ko chú trọng cái Assembly này nên cũng ko đầu tư nhiều lắm vào nó.
TITLE ASM1.2:tong 2 so thap phan
.MODEL SMALL
.STACK 100H
.DATA
CR EQU 0DH
LF EQU 0AH
X DW ?
MSG1 DB 'Nhap so thu nhat :$'
MSG2 DB CR,LF,'Nhap so thu hai :$'
MSG3 DB CR,LF,'Ket qua :$'
PATH DB 'C:123.log', 0 ; duong dan file ket qua
BUFFER DB 50 DUP (0)
.CODE
MAIN PROC
;Khoi tao DS
MOV AX,@DATA
MOV DS,AX
;Nhap so thu nhat
LEA DX,MSG1
MOV AH,9
INT 21H
CALL NHAPSO
;Nhap so thu hai
LEA DX,MSG2
MOV AH,9
INT 21H
CALL NHAPSO
ADD BX,X ;Thuc hien cong BX voi X
;In ket qua
LEA DX,MSG3
MOV AH,9
INT 21H
MOV AX,BX ;thu hien chuan bi in
CALL INKQ
LEA DX,buffer
MOV AH,9
INT 21H
;Tro ve DOS
MOV AH,4CH
INT 21H
MAIN ENDP
;-------------------------------
NHAPSO PROC
;VAO : KHONG
;RA: BX= GIA TRI NHI PHAN
;CAT GIU CAC THANH GHI
PUSH AX
PUSH CX
PUSH DX
BEGIN:
XOR BX,BX ;BX CHUA TONG, XOA BX
XOR CX,CX ;CX CHUA DAU, XOA CX
MOV AH,1 ;DOC KI TU DAU TIEN
INT 21H
CMP AL,'-' ;DAU -
JE TRU ;THIET LAP DAU
CMP AL,'+' ;DAU +
JE CONG
JMP REPEAT ;Doc ki tu
TRU:
MOV CX,1 ;So am
CONG:
INT 21H ;Doc ki tu
REPEAT:
CMP AL,'0'
JL NOT_DIGIT;ki tu<'0'
CMP AL,'9'
JG NOT_DIGIT;ki tu>'9'
AND AX,000FH;DOI RA CHU SO
PUSH AX
MOV AX, 10
MUL BX
POP BX
ADD BX,AX ;BX=BX*10+CHUSO
MOV AH,1 ;Doc ki tu
INT 21H
CMP AL,CR ;?CR
JNE REPEAT ;Tiep tuc
OR CX,CX ; kiem tra xem CX == 1 hay ko,
JE EXIT_
NEG BX ;cx == 1 tuc la so am
EXIT_:
;KHOI PHUC CAC THANH GHI
POP DX
POP CX
POP AX
RET
NOT_DIGIT:
MOV AH,2
MOV AL,CR
INT 21H
MOV AL,LF
INT 21H
JMP BEGIN ;LAM LAI TU DAU
NHAPSO ENDP
;--------------------------------------
INKQ PROC
;Vao: AX chua noi dung, dua ket qua tinh toan vao buffer
;cat giu cac thanh ghi
PUSH AX
PUSH BX
PUSH CX
PUSH DX
OR AX,AX ;AX<0
JNL END_IF1 ;Khong phai
;Dung
PUSH AX ;Cat so can dua ra
MOV AL,'-' ;Hien thi dau tru
MOV AH,2
INT 21H
POP AX
NEG AX
END_IF1:
XOR CX,CX ;Xoa CX de dem cac chu so thap phan
MOV BX,10
REPEAT2:
XOR DX,DX ;XOA DX
DIV BX ;CHIA AX CHO 10
PUSH DX ;CAT SO DU
INC CX ;TANG CX
OR AX,AX ;THUONG=0?
JNE REPEAT2
;HIEN THI KET QUA
LEA BX, BUFFER
PRINTF:
POP DX
OR DL,30H ; doi so ra ki tu
MOV BYTE PTR [BX], DL
INC BX
LOOP PRINTF
MOV BYTE PTR [BX], 0; ket thuc xau
INC BX
MOV BYTE PTR [BX], '$'; ket thuc xau
;KHOI PHUC CAC THANH GHI
POP DX
POP CX
POP BX
POP AX
RET
INKQ ENDP
;-----------------------------
;--------------------------------
Bài liên quan
Ai giúp e vớiiiiiiiiiiiiiiiiiiiiiiiiiii
Ủa, cái này hợp ngữ à? Sao không học C , Python mà học Assembly?
Trên trường học a ơi
Trường nào? Thường thì vào đại học là học C và C++ chứ nhỉ?
học KTMT và vi xử lí có cái này
Oh, không biết diễn đàn mình có ai rành về Assembly không anh @ltd ?
Hỏi ngu tý. Bạn chạy code assembly bằng gì thế?
Nó có IDE của nó mà?
chạy bằng emu 8086 a