dosseg
.model small
.stack 200h
.data
A dw ?
B dw ?
H dw ?
V dw ?
SA db 'Input length: $'
SB db 13,10,'Input width: $'
SH db 13,10,'Input height: $'
SV db 13,10,'Volume = $'
string db 255,0,255 dup(?)
errmsg db 'Invalid character! Use digits only.',13,10,'$'
negflag dw ?
.code
IntegerIn proc
start:
mov ah,0Ah
lea dx,string
int 21h
xor ax,ax
lea si,string+2
mov negflag,ax
cmp byte ptr [si],'-'
jne m2
not negflag
inc si
jmp m3
m2:
cmp byte ptr [si],'+'
jne m3
inc si
m3:
cmp byte ptr [si],13
je ex1
cmp byte ptr [sia],'0'
jb err1
cmp byte ptr [si],'9'
ja err1
mov bx,10
mul bx
sub byte ptr [si],'0'
add al,[si]
adc ah,0
inc si
jmp m3
err1:
lea dx,errmsg
mov ah,9
int 21h
jmp start
ex1:
cmp negflag,0
je ex
neg ax
ex:
ret
IntegerIn endp
IntegerOut proc
xor cx,cx
mov bx,10
cmp ax,0
jge m
neg ax
push ax
mov ah,2
mov dl,'-'
int 21h
pop ax
m:
inc cx
xor dx,dx
div bx
push dx
or ax,ax
jnz m
m1:
pop dx
add dx,'0'
mov ah,2
int 21h
loop m1
ret
IntegerOut endp
Volume proc near
push bp
mov bp,sp
mov ax,[bp+8]
mov bx,[bp+6]
mul bx
mov bx,[bp+4]
mul bx
pop bp
ret 6
Volume endp
Begin:
mov ax,@data
mov ds,ax
mov ah,9
lea dx,SA
int 21h
call IntegerIn
mov A,ax
mov ah,9
lea dx,SB
int 21h
call IntegerIn
mov B,ax
mov ah,9
lea dx,SH
int 21h
call IntegerIn
mov H,ax
mov ax,A
push ax
mov ax,B
push ax
mov ax,H
push ax
call Volume
mov V,ax
mov ah,9
lea dx,SV
int 21h
mov ax,V
call IntegerOut
mov ax,4C00h
int 21h
end Begin
#include <iostream>
using namespace std;
int Volume(int a, int b, int h)
{
return a * b * h;
}
int main()
{
int A, B, H, V;
cout << "Input length: ";
cin >> A;
cout << "Input width: ";
cin >> B;
cout << "Input height: ";
cin >> H;
V = Volume(A, B, H);
cout << "Volume = " << V;
return 0;
}