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
;-----------------------------

;--------------------------------

Huy Lê viết 23:06 ngày 30/09/2018

Ai giúp e vớiiiiiiiiiiiiiiiiiiiiiiiiiii

Người bí ẩn viết 23:07 ngày 30/09/2018

Ủa, cái này hợp ngữ à? Sao không học C , Python mà học Assembly?

Huy Lê viết 23:04 ngày 30/09/2018

Trên trường học a ơi

Người bí ẩn viết 23:18 ngày 30/09/2018

Trường nào? Thường thì vào đại học là học C và C++ chứ nhỉ?

Huy Lê viết 23:19 ngày 30/09/2018

học KTMT và vi xử lí có cái này

Người bí ẩn viết 23:18 ngày 30/09/2018

Oh, không biết diễn đàn mình có ai rành về Assembly không anh @ltd ?

Nguyễn Tấn Đức viết 23:15 ngày 30/09/2018

Hỏi ngu tý. Bạn chạy code assembly bằng gì thế?

Người bí ẩn viết 23:16 ngày 30/09/2018

Nó có IDE của nó mà?

Huy Lê viết 23:08 ngày 30/09/2018

chạy bằng emu 8086 a

Bài liên quan
0