.model small
. |
. |
.stack 200h
.data
a db?
c db?
d db 4 dup (?,?,?,?)
e dw?
f dw?
y dw?
t dw 8
D16 db '0123456789ABCDEF'
BUF db 4 DUP (20h),13,10,'$'
str1 db 'Resultat',13,10,'$'
.code
OutInt proc
test ax, ax; .
jns oi1
; ,
; .
mov cx, ax
mov ah, 02h
mov dl, '-'
int 21h
mov ax, cx
neg ax
; CX
oi1:
xor cx, cx
mov bx, 10; . 10 ..
oi2:
xor dx,dx
div bx
; .
; .
; ,
; .
push dx
inc cx
; ,
;
; , ,
; , .
test ax, ax
jnz oi2
; .
. 230100.7.1.00 |
mov ah, 02h
. |
. |
pop dx
; ,
; .
add dl, '0'
int 21h
; ,
; .
loop oi3
ret
OutInt endp
InputInt proc
mov ah,0ah
xor di,di
mov dx,offset buff;
int 21h;
mov dl,0ah
mov ah,02
int 21h;
;
mov si,offset buff+2;
cmp byte ptr [si],"-";
jnz ii1
mov di,1;
inc si;
ii1:
xor ax,ax
mov bx,10; c
ii2:
mov cl,[si];
cmp cl,0dh;
jz endin
; ,
;
cmp cl,'0'; <0
jl er
cmp cl,'9'; >9
ja er
sub cl,'0';
mul bx; 10
add ax,cx;
inc si;
jmp ii2;
. 230100.7.1.00 |
er:; ,
;
. |
. |
mov ah,09
int 21h
int 20h
;
; ax
endin:
cmp di,1; ,
jnz ii3
neg ax;
ii3:
ret
error db "incorrect number$"
buff db 6,7 Dup(?)
InputInt endp
PP1 proc near;---------------------e
mov Al,2
mov BL,c
imul BL
cbw
mov e,AX
cwd
mov AX,0
mov BX,0
ret 6;???
PP1 endp
|
|
PP2 proc near;f
mov AX,0
mov AL,a
imul AL
cbw
mov DX, 1
add AX, DX
cbw
mov f, AX
cwd
mov AX,0
mov DX,0
ret 6;???
PP2 endp
Begin:
mov ax, @Data
mov ds, ax
. 230100.7.1.00 |
. |
. |
mov a,AL
call InputInt;
mov c,AL
mov SI,0
push SI
l1: call InputInt
pop SI
mov d[SI], AL
add SI,2
cmp SI,t
push SI
jne l1
call PP1; \ 1
call PP2; \ 2
mov SI,0
mov CX,4
xor AX,AX
mov y,AX
for: mov DX,0
mov AH,0
mov CL,0
mov AL,d[SI]
mov BL, AL
cbw
cmp AX,0
jg m2
mov CL,1
mov AL, BL
neg AL
cbw
m2: mov DL,4
idiv DL
cbw
cmp CL,0
je m3
neg AL
cbw
m3: mov BX, e
sub BX,AX
cbw
mov AX,BX
cwd
mov AX, BX
cwd
mov BX,f
idiv BX;AL=AL/f
. 230100.7.1.00 |
cbw
mov BX,AX
cwd
mov AX, BX
cwd
mov DX,y
add AX, DX
cbw
mov y, AX
add SI,2
cmp SI,t
jne for
mov CX,0
mov AX, y
mov DX, AX;DX:=AX
call OutInt
mov AX,4c00h
int 21h
END begin
IBM PC
. |
. |
. 230100.7.1.00 |
. |
. |
. 230100.7.1.00 |
Int ( ) | float ( ) | ( ) | IBM PC ( ) | |
a = 2 c = 20 d[0] = 20 d[1] = 12 d[2] = 4 d[3] = -16 | 1D | |||
a = 3 c = 30 d[0] = 51 d[1] = 41 d[2] = 24 d[3] = -21 | 21.625 | |||
a = 2 c = 20 d[0] = 20 d[1] = 14 d[2] = 4 d[3] = 16 | 29.3 | 1C |
. |
. |
:
1D = 29
14 = 20
1C = 28.
. 230100.7.1.00 |
, ( int), IBM PC 100%. ( float) 2 .
( int )
. |
. |
: :. , . Enter.
: 4 :. 4 , . Enter.
|
|
y=. -, (1) , d[0], d[1], d[2], d[3]. .
( float )
, : :. , . Enter.
: :. , . Enter.
: 4 :. 4 ,
. 230100.7.1.00 |
. Enter.
. |
. |
y=. -, (1) , d[0], d[1], d[2], d[3]. .
. 1
*.txt. , , 1 .
TCom.exe Asm, File Open *.txt. Source module. GoAsm, , No errors detected! .
TCom.exe Load .
Start .
, d (1) , TCom.exe ( . 1). .
IBM PC
DOSBox 0.74. ( mount c, . 2 ( 1, )) , *.asm,
. 230100.7.1.00 |
. 230100.7.1.00 |
. 230100.7.1.00 |
DOSBox 0.74 tasm.exe < >..asm.
.2 , . , ( . 2). *.obj.
DOSBox 0.74 . tlink.exe < >.obj. , . , DOSBox 0.74 ( . 2). *.exe.
. < >.exe. DOSBox 0.74 , , , : , c, d[0], d[1], d[2], d[3]. Enter.
|
|
, .
. |
. |
. 230100.7.1.00 |
( int )
, = 14
= 962
= 2.5
= , 1
( float )
, = 14
=1003
= 1.52
= , 1
. |
. |
=664
= 15 .
IBM PC
, = 203 142
*.asm = 6 594
*.obj = 707
*.exe =924
= , 1
= , 1
. 230100.7.1.00 |
, : , IBM PC Intel 8086.
. , , , IBM PC, - . , , .
, , IBM PC.
. |
. |
. 230100.7.1.00 |
1. . . Win 32. . .: , 2007. 368 . ISBN 978-5-8459-1197-1
2. . . DOS, Windows UNIX. . ; . , 2006. 608 . ISBN 5-94074-259-9
3. . Intel = Assembly Language for Intel-Based Computers. .: , 2005. 912 . ISBN 0-13-091013-9
4. . . ? ! . .: -, 2007. 384 . ISBN 978-5-94157-709-
. |
. |
. 230100.7.1.00 |