. , , ,

,,,

add cmp — ,

-

. -

-, -

.

,

. : , -

.

, , -

, , .

-

( ).

( ) -

. -

-

. -

, -

(). -

.

. ,

, . -

, , , -

, -

. , -

, .

,

.

.

(, ) -

,

.

, -

. -

-

. -

, .

, , -

, -

.

, , .


;█▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀█

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


[1]L*.FRM*.MAC
<

                                        

- . - -,

 

 

 

! , , , .
. , :