,,,
-
. -
-, -
.
,
. : , -
.
, , -
, , .
-
( ).
( ) -
. -
-
. -
, -
(). -
.
. ,
, . -
, , , -
, -
. , -
, .
,
.
.
(, ) -
,
.
, -
. -
-
. -
, .
, , -
, -
.
, , .
;█▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀█
;█ ----- ADD ----- █
;█▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄█
.MODEL TINY
.CODE
JUMPS
ORG 100h
begin:
jmp general
;┌──────────────────────────────────────┐
;│ stirng │
;└──────────────────────────────────────┘
Wrt macro string
mov ah,9 ;
lea dx,string ;
int 21h ; DOS
endm
;┌──────────────────────────────┐
;│ │
;└──────────────────────────────┘
general proc near
push cs ;
push cs ;
push cs ;
pop ds ;
pop es ;
pop ss ; ( )
Wrt about ;
;
mov cl,ds:[80h] ;
sub ch,ch ; ch
cmp cx,2 ;
jb source_error ; - .
mov di,82h ; DI
mov path1,di ;
mov al,' ' ;
repne scasb ;
jne dest_error ; .
mov byte ptr [di-1],0 ; ASCIIZ
mov path2,di ;
mov cl,ds:[80h] ; cl
sub ch,ch ; ch
mov al,13 ; CR
repne scasb ;
jne dest_error ; .
mov byte ptr [di-1],0 ; ASCIIZ
call Fopen ;
jc open_source_error ; ,
call Fcreate ;
jc create_dest_error ; ,
gen1: call Fread ;
jc read_error ;
cmp EOF,1 ;
jne gen2 ; ,
cmp si,0 ;
jne gen2 ; 0
jmp read_error ;
gen2: inc string ;
mov strlen,si ;
call DelSpc ;
cmp strlen,2 ; 2 ,
je gen1 ;
lea di,buffer ;
cmp byte ptr [di],';' ; ;
je gen1 ;
lea si,command ; ADD
mov cx,3 ; 3
repe cmpsb ;
je gen3 ; , ADD
wrt error06 ;
call WrtStr ;
mov was_error,1 ;
jmp gen1 ;
gen3: call Coding
cmp was_error,0
jne gen1
call Fwrite
jnc gen1
ret
gen4: mov bx,dest ;
call Fclose ;
Wrt mes2 ;
Wrt mes3 ;
call WrtStr ;
Wrt mes1 ; CR,LF
ret ; DOS
;
source_error:
Wrt error01
ret
dest_error:
Wrt error02
ret
open_source_error:
Wrt error03
ret
create_dest_error:
Wrt error04
ret
read_error:
cmp EOF,1 ;
je skip_err_message ; ,
Wrt error05 ;
mov was_error,1 ;
skip_err_message:
mov bx,source ;
call Fclose ;
cmp was_error,0 ;
je gen4 ; ,
call Fdel ;
Wrt mes1 ; CR,LF
Wrt bell ;
ret
general endp
;┌──────────────────────────────────────────────────────┐
;│ AX │
;└──────────────────────────────────────────────────────┘
Decimal proc near
call clear ;
mov cx,0010 ; CX
lea si,outstr+4 ;
b20: cmp ax,0010 ; AX 10
jb short b30 ; ,
xor dx,dx ; DX
div cx ; AX CX
or dl,30h ; 48, 1
mov [si],dl ;
dec si ;
jmp short b20 ;
b30: or al,30h ; 48, 1
mov [si],al ;
ret
; . outstr ( )
clear proc near
lea si,outstr ;
mov cl,48 ; 48 -
mov [si],cl ;
mov [si+1],cl ;
mov [si+2],cl ;
mov [si+3],cl ;
mov [si+4],cl ;
ret ;
clear endp
outstr db ' $'
Decimal endp
;┌──────────────────────────────┐
;│ │
;└──────────────────────────────┘
WrtStr proc near
xor ax,ax ; AX
mov al,string ; AL
call Decimal ;
Wrt outstr ;
ret ;
WrtStr endp
;┌─────────────────────────────┐
;│ │
;└─────────────────────────────┘
DelSpc proc near
cld ;
lea si,buffer ; SI
mov di,si ; DI
mov cx,strlen ; CX
xor bx,bx ; BX
mov dl,1 ;
del1: lodsb ; AL
cmp al,65 ; A?
jb del2 ;
cmp al,90 ; Z?
ja del2 ;
add al,32 ; F-f
xor dl,dl ; DL
jmp del4 ;
del2: cmp al,' ' ; ?
je del3 ; ,
xor dl,dl ; DL
jmp del4 ;
del3: cmp dl,1 ; DL=1?
je del5 ; ,
mov dl,1 ; DL 1
del4: stosb ;
inc bx ;
del5: loop del1 ;
mov strlen,bx ;
ret ;
DelSpc endp
;┌──────────────────────────┐
;│ │
;└──────────────────────────┘
Fopen proc near
mov ah,3dh ;
xor al,al ; (AL=0)
mov dx,path1 ; ASCIIZ
int 21h ; DOS
jnc ok1 ; ,
stc ;
ret ;
ok1: mov source,ax ;
ret ;
Fopen endp
;┌──────────────────────────┐
;│ │
;└──────────────────────────┘
Fcreate proc near
mov ah,3ch ;
xor cx,cx ; CX
mov dx,path2 ; ASCIIZ
int 21h ; DOS
jnc ok2 ; ,
mov ah,3ch ;
xor cx,cx ;
lea dx,default ; OUT.COM
int 21h ;
jnc ok2 ; -
stc ;
ret ;
ok2: mov dest,ax ;
ret ;
default db 'OUT.COM',0
Fcreate endp
;┌──────────────────────────┐
;│ │
;└──────────────────────────┘
Fclose proc near
mov ah,3eh ;
int 21h ; DOS
jnc ok3 ; ,
Wrt error05 ;
ok3: ret ;
Fclose endp
;┌────────────────────────┐
;│ │
;└────────────────────────┘
Fread proc near
lea dx,buffer ;
mov di,dx ; DI
xor si,si ; SI
mov bx,source ; BX
mov cx,1 ;
frd1: mov ah,3fh ;
int 21h ; DOS
jnc frd2 ; ,
wrt error05 ;
stc ;
ret ;
frd2: cmp ax,0 ; AX=0,
je end1 ; EOF
inc si ;
cmp byte ptr [di],10 ;
je frd3 ; ,
inc dx ;
inc di ;
jmp frd1 ;
end1: mov EOF,1 ;
frd3: clc ;
ret ;
Fread endp
;┌─────────────────────────┐
;│ │
;└─────────────────────────┘
Fwrite proc near
mov bx,dest ; BX
lea dx,cod ; DX
mov cx,2 ;
mov ah,40h ;
int 21h ; DOS
jnc ok4 ; ,
Wrt error10 ;
ok4: ret ;
Fwrite endp
;┌──────────────────────────┐
;│ │
;└──────────────────────────┘
Fdel proc near
mov dx,path2 ;
mov ah,41h ;
int 21h ; DOS
jnc ok5 ; ,
lea dx,defaul2 ; OUT.COM
mov ah,41h ;
int 21h ; DOS
jnc ok5 ; ,
Wrt error11 ;
ok5: ret ;
defaul2 db 'OUT.COM',0
Fdel endp
;┌────────────────────────────────┐
;│ │
;└────────────────────────────────┘
Coding proc near
inc di ;
mov si,di ; SI
mov cod,0 ;
mov numbop,0 ; -
mov al,',' ;
mov cx,strlen ; CX
sub cx,4 ; ADD+
repne scasb ;
je cod1 ; ,
Wrt error07 ;
call WrtStr ;
mov was_error,1 ;
ret ;
cod1: mov second,di ; second
dec di ;
dec di ;
cod2: mov dx,di ; .
sub dx,si ; .
inc dx ; 1
cmp dx,2 ;
je cod3 ; 2, -
ja cod8 ; , -
Wrt error08 ;
call WrtStr ;
mov was_error,1 ;
ret ;
; --------------------------------------; -
cod3: mov dx,16 ; 16 . DX -
lea di,Rtable ;
newreg: mov cx,2 ;
rep cmpsb ;
je regfound ; ,
inc di ; 1
inc di ; 1
dec si ; .
dec dx ; 1
jnz newreg ; ,
Wrt error08 ; -
call WrtStr ;
mov was_error,1 ;
ret ;
regfound:
mov ah,[di] ;
cmp numbop,0 ;
je cod7 ; d-
cmp typeop,1 ;
je cod4 ; , . m
xor al,al ;
mov bx,cod ; BX
mov bh,ah ; BH
and bx,0101h ; w-
cmp bh,bl ;
je cod5 ; ,
Wrt error09 ; -
call WrtStr ;
mov was_error,1 ;
ret ;
cod4: mov al,ah ; AL
and al,01h ; 1 w-
and ah,00111000b ; reg
jmp cod6 ;
cod5: mov cl,3 ; 3
shr ah,cl ; r/m
or ah,0c0h ; mod 11
; (.. r/m )
cod6: or cod,ax ;
inc numbop ;
mov typeop,0 ; r
jmp cod11 ;
cod7: mov al,02h ; (d-)
or al,ah ;
and ax,0011100000000011b ; reg r/m
mov cod,ax ;
inc numbop ;
mov typeop,0 ; r
jmp short cod11 ;
;---------------------------------------; -
cod8: cmp numbop,0 ; ?
je cod9 ; -
cmp typeop,1 ; m?
jne cod9 ; -
Wrt error10 ; : -
call WrtStr ;
mov was_error,1 ;
ret ;
cod9: cmp byte ptr [si],'[' ; ?
jne cod10 ; -
cmp byte ptr [di],']' ; ?
jne cod10 ; -
inc si ;
dec di ;
mov dx,di ; DX
sub dx,si ;
inc dx ; 1
; .. DX -
; --------- mod r/m ---------------------------
mov bx,7 ; 7
lea di,ExTabl ;
rm1: push si ;
mov cl,[di] ; CL
xor ch,ch ; CH
inc di ; ExTabl
cmp cx,dx ;
jne rm2 ;
rep cmpsb ;
je rm3 ;
rm2: inc di ; ExTabl 1
add di,cx ; 5
pop si ; .
dec bx ;
jnz rm1 ; -
Wrt error08 ; 0,
call WrtStr ; ,
mov was_error,1 ;
ret ;
rm3: pop si ; .
mov ah,[di] ; AH
xor al,al ;
or cod,ax ;
inc numbop ;
mov typeop,1 ; m
jmp cod11 ;
cod10:
Wrt error08 ;
call WrtStr ;
mov was_error,1 ;
ret
cod11: cmp numbop,1 ; ?
je cod12 ; -
ret ;
cod12: mov di,second ; DI
mov si,di ; SI
mov cx,strlen ; CX
sub cx,4 ; 4
cod13: mov al,[di] ;
cmp al,' ' ; ?
je cod14 ; ,
cmp al,';' ; ?
je cod14 ; ,
cmp al,13 ; ?
je cod14 ; ,
inc di ;
loop cod13 ;
cod14: dec di ;
jmp cod2 ;
Coding endp
about db 13,10,' ADD. (c) 1997, , .410703, '
db ' .',13,10,'$'
error01 db ' : ADD _ _',13,10,'$'
error02 db 13,10,' ',13,10,7,'$'
error03 db 13,10,' ',13,10,7,'$'
error04 db 13,10,' ',13,10,7,'$'
error05 db 13,10,' ',13,10,7,'$'
error06 db 13,10,' : $'
error07 db 13,10,' : $'
error08 db 13,10,' : $'
error09 db 13,10,' $'
error10 db 13,10,' ',13,10,7,'$'
error11 db 13,10,' ',13,10,7,'$'
mes1 db 13,10,'$'
mes2 db 13,10,' $'
mes3 db 13,10,' : $'
bell db 7,'$'
buffer db 1024 dup (32) ;
command db 'add' ;
path1 dw 0 ;
path2 dw 0 ;
source dw 0 ;
dest dw 0 ;
; 00reg00w
Rtable db 'ax',1 ; 00000001b
db 'bx',25 ; 00011001b
db 'cx',9 ; 00001001b
db 'dx',17 ; 00010001b
db 'si',49 ; 00110001b
db 'di',57 ; 00111001b
db 'bp',41 ; 00101001b
db 'sp',33 ; 00100001b
db 'al',0 ; 00000000b
db 'ah',32 ; 00100000b
db 'bl',24 ; 00011000b
db 'bh',56 ; 00111000b
db 'cl',8 ; 00001000b
db 'ch',40 ; 00101000b
db 'dl',16 ; 00010000b
db 'dh',48 ; 00110000b
;mod000r/m
ExTabl db 5,'bx+si',0 ; 00000000b
db 5,'bx+di',1 ; 00000001b
db 5,'bp+si',2 ; 00000010b
db 5,'bp+di',3 ; 00000011b
db 2,'si',4 ; 00000100b
db 2,'di',5 ; 00000101b
db 2,'bx',7 ; 00000111b
string db 0 ;
strlen dw 0 ;
EOF db 0 ; (1- , 2-)
was_error db 0 ; (1-, 2-)
numbop db 0 ; (0-, 1-)
typeop db 0 ; (0-, 1-)
cod dw 0 ;
second dw 0 ;
end begin
;╔══════════════════════════════════════════════════════════════════╗
;║ CMP ║
;╚══════════════════════════════════════════════════════════════════╝
.MODEL TINY
.CODE
JUMPS
ORG 100h
begin:
jmp general
Wrt macro string
mov ah,9 ;
lea dx,string ;
int 21h ; DOS
endm
;┌──────────────────────────────┐
;│ │
;└──────────────────────────────┘
general proc near
push cs ;
push cs
push cs
pop ds
pop es
pop ss ; ( )
Wrt autor ;
;
mov cl,ds:[80h] ;
sub ch,ch ; ch
cmp cx,2 ;
jb source_error ; - .
mov di,82h ; DI
mov Addr1,di ;
mov al,' ' ;
repne scasb ;
jne dest_error ; .
mov byte ptr [di-1],0 ; ASCIIZ
mov Addr2,di ;
mov cl,ds:[80h] ; cl
sub ch,ch ; ch
mov al,13 ; CR
repne scasb ;
jne dest_error ; .
mov byte ptr [di-1],0 ; ASCIIZ
call Fopen ;
jc open_source_error ; ,
call Fcreate ;
jc create_dest_error ; ,
gen1: call Fread ;
jc read_error ;
cmp flag_eof,1 ;
jne gen2 ; ,
cmp si,0 ;
jne gen2 ; 0
jmp read_error ;
gen2: inc string ;
mov strlen,si ;
call DelSpc ;
cmp strlen,2 ; 2 ,
je gen1 ;
lea di,buffer ;
cmp byte ptr [di],';' ; ;
je gen1 ;
lea si,command ; CMP
mov cx,3 ; 3
repe cmpsb ;
je gen3 ; , CMP
wrt error06 ;
call WrtStr ;
mov flag_err,1 ;
jmp gen1 ;
gen3: call Coding
cmp flag_err,0
jne gen1
call Fwrite
jnc gen1
ret
gen4: mov bx,dest ;
call Fclose ;
Wrt m2 ;
Wrt m3 ;
call WrtStr ;
Wrt m1 ; CR,LF
ret ; DOS
;
source_error:
Wrt error01
ret
dest_error:
Wrt error02
ret
open_source_error:
Wrt error03
ret
create_dest_error:
Wrt error04
ret
read_error:
cmp flag_eof,1 ;
je skip_err_message ; ,
Wrt error05 ;
mov flag_err,1 ;
skip_err_message:
mov bx,source ;
call Fclose ;
cmp flag_err,0 ;
je gen4 ; ,
call Fdel ;
Wrt m1 ; CR,LF
Wrt bell ;
ret
general endp
;┌──────────────────────────────────────────────────────┐
;│ AX │
;└──────────────────────────────────────────────────────┘
Decimal proc near
call clear ;
mov cx,0010 ; CX
lea si,outstr+4 ;
b20: cmp ax,0010 ; AX 10
jb short b30 ; ,
xor dx,dx ; DX
div cx ; AX CX
or dl,30h ; 48, 1
mov [si],dl ;
dec si ;
jmp short b20 ;
b30: or al,30h ; 48, 1
mov [si],al ;
ret
; . outstr ( )
clear proc near
lea si,outstr ;
mov cl,48 ; 48 -
mov [si],cl ;
mov [si+1],cl
mov [si+2],cl
mov [si+3],cl
mov [si+4],cl
ret ;
clear endp
outstr db ' $'
Decimal endp
;┌──────────────────────────────┐
;│ │
;└──────────────────────────────┘
WrtStr proc near
xor ax,ax ; AX
mov al,string ; AL
call Decimal ;
Wrt outstr ;
ret ;
WrtStr endp
;┌─────────────────────────────┐
;│ │
;└─────────────────────────────┘
DelSpc proc near
cld ;
lea si,buffer ; SI
mov di,si ; DI
mov cx,strlen ; CX
xor bx,bx ; BX
mov dl,1 ;
del1: lodsb ; AL
cmp al,65 ; A?
jb del2 ;
cmp al,90 ; Z?
ja del2 ;
add al,32 ; F-f
xor dl,dl ; DL
jmp del4 ;
del2: cmp al,' ' ; ?
je del3 ; ,
xor dl,dl ; DL
jmp del4 ;
del3: cmp dl,1 ; DL=1?
je del5 ; ,
mov dl,1 ; DL 1
del4: stosb ;
inc bx ;
del5: loop del1 ;
mov strlen,bx ;
ret ;
DelSpc endp
;┌──────────────────────────┐
;│ │
;└──────────────────────────┘
Fopen proc near
mov ah,3dh ;
xor al,al ; (AL=0)
mov dx,Addr1 ; ASCIIZ
int 21h ; DOS
jnc ok1 ; ,
stc ;
ret ;
ok1: mov source,ax ;
ret ;
Fopen endp
;┌──────────────────────────┐
;│ │
;└──────────────────────────┘
Fcreate proc near
mov ah,3ch ;
xor cx,cx ; CX
mov dx,Addr2 ; ASCIIZ
int 21h ; DOS
jnc ok2 ; ,
mov ah,3ch ;
xor cx,cx ;
lea dx,default ; OUT.COM
int 21h ;
jnc ok2 ; -
stc ;
ret ;
ok2: mov dest,ax ;
ret ;
default db 'OUT.COM',0
Fcreate endp
;┌──────────────────────────┐
;│ │
;└──────────────────────────┘
Fclose proc near
mov ah,3eh ;
int 21h ; DOS
jnc ok3 ; ,
Wrt error05 ;
ok3: ret ;
Fclose endp
;┌────────────────────────┐
;│ │
;└────────────────────────┘
Fread proc near
lea dx,buffer ;
mov di,dx ; DI
xor si,si ; SI
mov bx,source ; BX
mov cx,1 ;
frd1: mov ah,3fh ;
int 21h ; DOS
jnc frd2 ; ,
wrt error05 ;
stc ;
ret ;
frd2: cmp ax,0 ; AX=0,
je end1 ; flag_eof
inc si ;
cmp byte ptr [di],10 ;
je frd3 ; ,
inc dx ;
inc di ;
jmp frd1 ;
end1: mov flag_eof,1 ;
frd3: clc ;
ret ;
Fread endp
;┌─────────────────────────┐
;│ │
;└─────────────────────────┘
Fwrite proc near
mov ax,cmp_
or al,38h
mov cmp_,ax
mov bx,dest ; BX
lea dx,cmp_ ; DX
mov cx,2 ;
mov ah,40h ;
int 21h ; DOS
jnc ok4 ; ,
Wrt error10 ;
ok4: ret ;
Fwrite endp
;┌──────────────────────────┐
;│ │
;└──────────────────────────┘
Fdel proc near
mov dx,Addr2 ;
mov ah,41h ;
int 21h ; DOS
jnc ok5 ; ,
lea dx,defaul2 ; OUT.COM
mov ah,41h ;
int 21h ; DOS
jnc ok5 ; ,
Wrt error11 ;
ok5: ret ;
defaul2 db 'OUT.COM',0
Fdel endp
;┌────────────────────────────────┐
;│ │
;└────────────────────────────────┘
Coding proc near
inc di ;
mov si,di ; SI
mov cmp_,0 ;
mov numbop,0 ; -
mov al,',' ;
mov cx,strlen ; CX
sub cx,4 ; CMP+
repne scasb ;
je cmp_1 ; ,
Wrt error07 ;
call WrtStr ;
mov flag_err,1 ;
ret ;
cmp_1: mov addr2,di ; addr2
dec di ;
dec di ;
cmp_2: mov dx,di ; .
sub dx,si ; .
inc dx ; 1
cmp dx,2 ;
je cmp_3 ; 2, -
ja cmp_8 ; , -
Wrt error08 ;
call WrtStr ;
mov flag_err,1 ;
ret ;
; --------------------------------------; -
cmp_3: mov dx,16 ; 16 . DX -
lea di,RegTabl ;
newreg: mov cx,2 ;
rep cmpsb ;
je regfound ; ,
inc di ; 1
inc di ; 1
dec si ; .
dec dx ; 1
jnz newreg ; ,
Wrt error08 ; -
call WrtStr ;
mov flag_err,1 ;
ret ;
regfound:
mov ah,[di] ;
cmp numbop,0 ;
je cmp_7 ; d-
cmp typeop,1 ;
je cmp_4 ; , . m
xor al,al ;
mov bx,cmp_ ; BX
mov bh,ah ; BH
and bx,0101h ; w-
cmp bh,bl ;
je cmp_5 ; ,
Wrt error09 ; -
call WrtStr ;
mov flag_err,1 ;
ret ;
cmp_4: mov al,ah ; AL
and al,01h ; 1 w-
and ah,00111000b ; reg
jmp cmp_6 ;
cmp_5: mov cl,3 ; 3
shr ah,cl ; r/m
or ah,0c0h ; mod 11
; (.. r/m )
cmp_6: or cmp_,ax ;
inc numbop ;
mov typeop,0 ; r
jmp cmp_11 ;
cmp_7: mov al,02h ; (d-)
or al,ah ;
and ax,0011100000000011b ; reg r/m
mov cmp_,ax ;
inc numbop ;
mov typeop,0 ; r
jmp short cmp_11 ;
;---------------------------------------; -
cmp_8: cmp numbop,0 ; ?
je cmp_9 ; -
cmp typeop,1 ; m?
jne cmp_9 ; -
Wrt error10 ; : -
call WrtStr ;
mov flag_err,1 ;
ret ;
cmp_9: cmp byte ptr [si],'[' ; ?
jne cmp_10 ; -
cmp byte ptr [di],']' ; ?
jne cmp_10 ; -
inc si ;
dec di ;
mov dx,di ; DX
sub dx,si ;
inc dx ; 1
; .. DX -
; --------- mod r/m ---------------------------
mov bx,7 ; 7
lea di,MemTabl ;
rm1: push si ;
mov cl,[di] ; CL
xor ch,ch ; CH
inc di ; MemTab
cmp cx,dx ;
jne rm2 ;
rep cmpsb ;
je rm3 ;
rm2: inc di ; MemTabl 1
add di,cx ; 5
pop si ; .
dec bx ;
jnz rm1 ; -
Wrt error08 ; 0,
call WrtStr ; ,
mov flag_err,1 ;
ret ;
cmp_11: cmp numbop,1
je cmp_12
ret
rm3: pop si ; .
mov typeop,1 ; m
jmp cmp_11 ;
cmp_10:
Wrt error08 ;
call WrtStr ;
mov flag_err,1 ;
ret
cmp_12: mov di,addr2 ; DI
mov si,di ; SI
mov cx,strlen ; CX
sub cx,4 ; 4
cmp_13: mov al,[di] ;
cmp al,' ' ; ?
je cmp_14 ; ,
cmp al,';' ; ?
je cmp_14 ; ,
cmp al,13 ; ?
je cmp_14 ; ,
inc di ;
loop cmp_13 ;
cmp_14: dec di ;
jmp cmp_2 ;
Coding endp
Autor db 13,10,' CMP. (c) 1997, , .410703, '
db ' .',13,10,'$'
error01 db ' : CMP _ _',13,10,'$'
error02 db 13,10,' ',13,10,7,'$'
error03 db 13,10,' ',13,10,7,'$'
error04 db 13,10,' ',13,10,7,'$'
error05 db 13,10,' ',13,10,7,'$'
error06 db 13,10,' : $'
error07 db 13,10,' : $'
error08 db 13,10,' : $'
error09 db 13,10,' $'
error10 db 13,10,' ',13,10,7,'$'
error11 db 13,10,' ',13,10,7,'$'
m1 db 13,10,'$'
m2 db 13,10,' $'
m3 db 13,10,' : $'
bell db 7,'$'
buffer db 1024 dup (32) ;
command db 'cmp' ;
Addr1 dw 0 ;
Addr2 dw 0 ;
source dw 0 ;
dest dw 0 ;
; 00reg00w
RegTabl db 'ax',1 ; 00000001b
db 'bx',25 ; 00011001b
db 'cx',9 ; 00001001b
db 'dx',17 ; 00010001b
db 'si',49 ; 00110001b
db 'di',57 ; 00111001b
db 'bp',41 ; 00101001b
db 'sp',33 ; 00100001b
db 'al',0 ; 00000000b
db 'ah',32 ; 00100000b
db 'bl',24 ; 00011000b
db 'bh',56 ; 00111000b
db 'cl',8 ; 00001000b
db 'ch',40 ; 00101000b
db 'dl',16 ; 00010000b
db 'dh',48 ; 00110000b
; mod000r/m
MemTabl db 5,'bx+si',0 ; 00000000b
db 5,'bx+di',1 ; 00000001b
db 5,'bp+si',2 ; 00000010b
db 5,'bp+di',3 ; 00000011b
db 2,'si',4 ; 00000100b
db 2,'di',5 ; 00000101b
db 2,'bx',7 ; 00000111b
string db 0 ;
strlen dw 0 ;
flag_eof db 0 ; (1- , 2-)
flag_err db 0 ; (1-, 2-)
numbop db 0 ; (0-, 1-)
typeop db 0 ; (0-, 1-)
cmp_ dw 0 ;
addr2 dw 0 ;
end begin
1.
-
Intel 8086 -
ADD. -
( -, -, -),
, -
.
,
-.
:
-
-
- -
-
-
- ,
.
--
.
-
ADD, .
ADD :
000000 d w mod reg r/m
───┬── ┬ ┬ ─┬─ ─┬─ ─┬─
│ │ │ │ │ └──── / (3 )
│ │ │ │ └──────── (3 )
│ │ │ └──────────── / (2 )
│ │ └─────────────── (0-, 1-)
│ └─────────────────
└─────────────────────
Intel 8086 :
┌──────────────┬────────────┬───────────┐
│ │ w=0 │ w=1 │
├──────────────┼────────────┼───────────┤
│ 000 │ AL │ AX │
│ 001 │ CL │ CX │
│ 010 │ DL │ DX │
│ 011 │ BL │ BX │
│ 100 │ AH │ SP │
│ 101 │ CH │ BP │
│ 110 │ DH │ SI │
│ 111 │ BH │ DI │
└──────────────┴────────────┴───────────┘
MOD :
00 - r/m ,
( )
01 - r/m
10 - r/m
11 - r/m . w (
) -
R/M :
┌─────┬────────┐
│ R/M │ mod=00 │
├─────┼────────┤
│ 000 │ BX+SI │
│ 001 │ BX+DI │
│ 010 │ BP+SI │
│ 011 │ BP+DI │
│ 100 │ SI │
│ 101 │ DI │
│ 110 │ Direct │
│ 111 │ BX │
└─────┴────────┘
2.
-.
.
.
-
. -
OUT.COM.
.
.
-,
. ,
. .
'add'.
. ,
mod, r/m, w, d, reg. ,
. ,
. -
, . -
.
, . -
.
3.
- :
┌────────────┬────────────────────────────────────────────────────────┐
│ │ () 頠 │
├────────────┼────────────────────────────────────────────────────────┤
│ bout │ 堠 │
│ error01 │ " : ADD _ _" │
│ error02 │ " " │
│ error03 │ " " │
│ error04 │ " " │
│ error05 │ " " │
│ error06 │ " " │
│ error07 │ " " │
│ error08 │ " " │
│ error09 │ " " │
│ error10 │ " " │
│ error11 │ " " │
│ mes1 │ , 蠠 │
│ mes2 │ " " │
│ mes3 │ " " │
│ bell │ N7 ( ) │
│ buffer │ ࠠ │
│ command │ (ADD) │
│ path1 │ ࠠ │
│ path2 │ ࠠ │
│ source │ () ࠠ │
│ dest │ () ࠠ │
│ Rtable │ │
│ ExTabl │ , 蠠 │
│ string │ 蠠 │
│ strlen │ 蠠 │
│ EOF │ (1- , 2-) │
│ was_error │ (1-, 2-) │
│ numbop │ (0-, 1-) │
│ typeop │ (0-, 1-) │
│ cod │ 䠠 │
│ second │ ࠠ │
│ │ │
└────────────┴────────────────────────────────────────────────────────┘
, :
┌────────────┬────────────────────────────────────────────────────────┐
│ 堠 │ │
├────────────┼────────────────────────────────────────────────────────┤
│ Wrt │ stirng │
│ General │ │
│ Decimal │ AX │
│ WrtStr │ ꠠ │
│ DelSpc │ ⠠ │
│ Fopen │ ࠠ │
│ Fcreate │ ࠠ │
│ Fclose │ ࠠ │
│ Fread │ ࠠ │
│ Fwrite │ 렠 │
│ Fdel │ ࠠ │
│ Coding │ 蠠 │
│ │ │
└────────────┴────────────────────────────────────────────────────────┘
4.
.
, , -
INT 21H (DOS Functions).
:
AH=9 -
AH=3Dh -
AH=3Ch -
AH=3Eh -
AH=3Fh -
AH=40h -
AH=41h -
-
5.
-
, -
: , ( , -
), -
, .
.
; ADD
add ax,bx ; , , r,r
ADD [BP+SI],BX ; , , m,r
add [DI],CX ; , m,r
;
;
add dx,[bp+di] ; r,m
;
-, -
Intel 8086 ADD. -
, 1,
,
. ,
.
-
DOS 21h -
-.
1. . IBM PC
.; , 1992.
2. .H. , , 1989
3. .
4. .., ..
5. H . IBM
MS-DOS
6. .. MS-DOS
Copyright (c) 2024 Stud-Baza.ru , , , .