dogkenel321
17-11-2016, 01:20
Здравствуйте, я сейчас обучаюсь и мне дали вот такое задание, нужно изменить код программы!!!
Цель работы: Освоить процесс ввода и вывода данных, преоброзование их из ASCII-формата в двоичный и обратно.
Данный код программы считает среднее арифметическое 2 чисел!!! Надо изменить код программы, что бы он считал площадь треугольника.
codesg SEGMENT PARA 'code'
ASSUME ds:datasg, ss:ctacksg, cs:codesg
ORG 100h
begin
MULT10 DW 1
BINVAL DW 0
ASCVAL DB ?
ASCVAL2 DB ?
bin1 dw 1
BINVALUME2 dw 1
mov ah,00 ;=>cls
mov al,03
int 10h
nam db 'S= $'
mov ah,09h
lea dx,nam
int 21h
namepar label byte; =>begin enter
maxlen db 20
asclen db ?
namefld db 20 dup('$')
mov ah,0ah
lea dx,namepar
int 21h ;=>end enter
;//////////////////// ;=ASC TO BIN
MOV CX,10;+++
LEA SI,asclen
MOV AX,[SI]
xor bx,bx
MOV Bl,Al
LEA SI,namefld-1
mov BINVAL,0
b20: mov AL,[si+bx]
and ax,00fh
mul mult10
add BINVAL,ax
mov ax,mult10
mul cx
mov mult10,ax
dec bx
jnz b20
;////////////////////////////////////
;S=2 CX=B=3 BX=A=1
;S=28 CX=B=42(2A) BX=A=14(E)
MOV Bx,BINVAL
MOV AX,6
MUL BX
MOV BX,4
DIV BX
MOV CX,AX ;=> CX=B
MOV BIN1,CX
MOV BX,3
DIV BX
MOV BX,AX ;=> BC=A
MOV BINVALUME2,BX
;///////////////////////////////
XOR AX,AX
XOR BX,BX
XOR CX,CX
XOR DX,DX
XOR SI,SI
MOV CX,0010
LEA SI,ASCVAL-2
MOV AX,BIN1 ; CHISLO BIN
MOV BX,3
C20: CMP Ax,0010
JB C30
OR DX,DX
DIV CX
OR DL,30H
MOV [SI+BX],DL
DEC BX
JMP C20
C30: OR AL,30H
` MOV [SI+BX],AL
;/////////////////////////////
mov ah,02
mov bh,00
mov dh,02
mov dl,00
int 10h
bkmz db 'A= $'
mov ah,09h
lea dx,bkmz
int 21h
mov [ASCVAL+2],'$'
lea si,ascval
mov ah,09h
LEA dx,[SI]
int 21h
;*****************************************
XOR AX,AX
XOR BX,BX
XOR CX,CX
XOR DX,DX
XOR SI,SI
MOV CX,0010
LEA SI,ASCVAL2-2
MOV AX,BINVALUME2 ; CHISLO BIN
MOV BX,3
A20: CMP Ax,0010
JB A30
OR DX,DX
DIV CX
OR DL,30H
MOV [SI+BX],DL
DEC BX
JMP A20
A30: OR AL,30H
` MOV [SI+BX],AL
;/////////////////////////////
mov ah,02
mov bh,00
mov dh,03
mov dl,00
int 10h
bkmz2 db 'B= $'
mov ah,09h
lea dx,bkmz2
int 21h
mov [ASCVAL2+2],'$'
lea si,ascval2
mov ah,09h
LEA dx,[SI]
int 21h
mov ah,00;=>pause
int 16h
int 20h
end begin
codesg ENDS
Цель работы: Освоить процесс ввода и вывода данных, преоброзование их из ASCII-формата в двоичный и обратно.
Данный код программы считает среднее арифметическое 2 чисел!!! Надо изменить код программы, что бы он считал площадь треугольника.
codesg SEGMENT PARA 'code'
ASSUME ds:datasg, ss:ctacksg, cs:codesg
ORG 100h
begin
MULT10 DW 1
BINVAL DW 0
ASCVAL DB ?
ASCVAL2 DB ?
bin1 dw 1
BINVALUME2 dw 1
mov ah,00 ;=>cls
mov al,03
int 10h
nam db 'S= $'
mov ah,09h
lea dx,nam
int 21h
namepar label byte; =>begin enter
maxlen db 20
asclen db ?
namefld db 20 dup('$')
mov ah,0ah
lea dx,namepar
int 21h ;=>end enter
;//////////////////// ;=ASC TO BIN
MOV CX,10;+++
LEA SI,asclen
MOV AX,[SI]
xor bx,bx
MOV Bl,Al
LEA SI,namefld-1
mov BINVAL,0
b20: mov AL,[si+bx]
and ax,00fh
mul mult10
add BINVAL,ax
mov ax,mult10
mul cx
mov mult10,ax
dec bx
jnz b20
;////////////////////////////////////
;S=2 CX=B=3 BX=A=1
;S=28 CX=B=42(2A) BX=A=14(E)
MOV Bx,BINVAL
MOV AX,6
MUL BX
MOV BX,4
DIV BX
MOV CX,AX ;=> CX=B
MOV BIN1,CX
MOV BX,3
DIV BX
MOV BX,AX ;=> BC=A
MOV BINVALUME2,BX
;///////////////////////////////
XOR AX,AX
XOR BX,BX
XOR CX,CX
XOR DX,DX
XOR SI,SI
MOV CX,0010
LEA SI,ASCVAL-2
MOV AX,BIN1 ; CHISLO BIN
MOV BX,3
C20: CMP Ax,0010
JB C30
OR DX,DX
DIV CX
OR DL,30H
MOV [SI+BX],DL
DEC BX
JMP C20
C30: OR AL,30H
` MOV [SI+BX],AL
;/////////////////////////////
mov ah,02
mov bh,00
mov dh,02
mov dl,00
int 10h
bkmz db 'A= $'
mov ah,09h
lea dx,bkmz
int 21h
mov [ASCVAL+2],'$'
lea si,ascval
mov ah,09h
LEA dx,[SI]
int 21h
;*****************************************
XOR AX,AX
XOR BX,BX
XOR CX,CX
XOR DX,DX
XOR SI,SI
MOV CX,0010
LEA SI,ASCVAL2-2
MOV AX,BINVALUME2 ; CHISLO BIN
MOV BX,3
A20: CMP Ax,0010
JB A30
OR DX,DX
DIV CX
OR DL,30H
MOV [SI+BX],DL
DEC BX
JMP A20
A30: OR AL,30H
` MOV [SI+BX],AL
;/////////////////////////////
mov ah,02
mov bh,00
mov dh,03
mov dl,00
int 10h
bkmz2 db 'B= $'
mov ah,09h
lea dx,bkmz2
int 21h
mov [ASCVAL2+2],'$'
lea si,ascval2
mov ah,09h
LEA dx,[SI]
int 21h
mov ah,00;=>pause
int 16h
int 20h
end begin
codesg ENDS