⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 convert.asm

📁 汇编语言编写的一个图形放大程序
💻 ASM
字号:
.MODEL COMPACT
.486
;---------------------------------------------------------------
;宏定义

HAA MACRO X
X:	MOV AL,[SI]
	MOV [DI],AL
	INC SI
	INC DI
	CMP BYTE PTR [SI],20H
	JNE X
	JMP B1
	ENDM
	
HBB MACRO 
	MOV AH,[SI]
	AND AH,0FH
	MOV [DI],AH
	ENDM

WRITE MACRO
    MOV AH,9
    INT 21H
    ENDM

HMTPF MACRO
	MOV EAX,0
	MOV AX,y1
	MOV ECX,srowlength
	MUL ECX
	MOV ECX,EAX
	MOV EAX,0
	MOV AX,x1
	MOV DX,3
	MUL DX
	ADD EAX,ECX
	ADD EAX,54
	ENDM
	
HEAX MACRO
	MOV DX,AX
	ROL EAX,16
	MOV CX,AX
	ENDM
	
Rx1y1 MACRO
	HMTPF
	HEAX
	CALL movepoint
	LEA DX,T1T2
	MOV CX,6
	CALL readh
	ENDM

Rx1y2 MACRO
	HMTPF
	ADD EAX,srowlength
	HEAX
	CALL movepoint
	LEA DX,T3T4
	MOV CX,6
	CALL readh
	ENDM
	
CTRL MACRO
	LEA DX,CTR
	MOV AH,9
	INT 21H
	ENDM
;---------------------------------------------------------------
.STACK 200
.DATA
bmp DB 54 DUP(0) ;存放原图片和新图片的前54个字节数据
bdata DB 30720 DUP(0) ;暂时存放新图片的一个扫描行的像素数据
buf DB 80
	DB ?
	DB 80 DUP(0)
spathname DB 30 DUP(0) ;原图片的路径
ppathname DB 30 DUP(0) ;新图片的路径
handle DW 0 ;原图片文件代号
phandle DW 0 ;新图片文件代号
m DW 0 ;m、n只能是1-9数字
n DW 0
sf DD 0 ;缩放系数
swidth DD 0 ;原图片宽度
sheight DD 0 ;原图片高度
outwidth DD 0 ;新图片宽度
outheight DD 0 ;新图片高度
srowlength DD 0 ;原图片一个扫描行的字节数
prowlength DD 0 ;新图片一个扫描行的字节数
sbbyte DB 0 ;原图片一个扫描行要补的字节数
pbbyte DB 0 ;新图片一个扫描行要补的字节数
x1 DW 0
x2 DW 0
y1 DW 0
y2 DW 0
u DD 0
v DD 0
p1 DW 0 ;(x1,y1)坐标处一个像素的RGB分量之一
p2 DW 0 ;(x2,y1)...........................
p3 DW 0 ;(x1,y2)...........................
p4 DW 0 ;(x2,y2)...........................
i DD 0 ;宽度循环变量
j DD 0 ;高度循环变量
f1 DD 0
ppixel DW 0 ;(i,j)坐标一个像素的RGB分量之一
T1T2 DB 6 DUP(0) ;
T3T4 DB 6 DUP(0) ;
input DB 'exam:',0DH,0AH,'D:\football.bmp D:\new.bmp 2 1',0DH,0AH,0DH,0AH,'$'
createmsg DB '* * * * * create error * * * * *',0DH,0AH,'$'
openmsg DB '* * * * * open error * * * * *',0DH,0AH,'$'
readmsg DB '* * * * * read error * * * * *',0DH,0AH,'$'
writemsg DB '* * * * * write error * * * * *',0DH,0AH,'$'
movemsg DB '* * * * * move error * * * * *',0DH,0AH,'$'
convertmsg DB 0DH,0AH,0DH,0AH,0DH,0AH,'* * * * * convert victory * * * * *',0DH,0AH,'$'
dest DW 0
shifang DW 0
.CODE
BEGIN PROC FAR
	MOV AX,@DATA
	MOV DS,AX
	MOV ES,AX
	
	LEA DX,input
	WRITE
	
	FINIT
	
	FNSTCW dest					;置控制寄存器RC位为11
	OR dest,0000110000000000B
	FLDCW dest

;------------------------------------------------------------	
	LEA DX,buf
	MOV AH,10
	INT 21H
	
	MOV CX,4
	LEA DI,spathname
	LEA SI,buf+2
A1:	CMP CX,3
	JE C1
	CMP CX,2
	JE D1
	CMP CX,1
	JE E1
	HAA Q
C1:	LEA DI,ppathname
	HAA T
D1:	LEA DI,m
	HBB
	JMP B1
E1:	LEA DI,n
	HBB
	JMP A2
B1:	DEC CX
K8: INC SI
	CMP BYTE PTR [SI],20H
	JE K8
	JMP A1
;-----------------------------------------------------------------
	
A2:	FILD m
	FIDIV n
	FSTP sf
	
	CALL openh		
	
	LEA DX,bmp
	MOV CX,54
	CALL readh	
	
	LEA DI,bmp
	ADD DI,18
	MOV EAX,DWORD PTR [DI]
	MOV swidth,EAX
	
	ADD DI,4
	MOV EAX,DWORD PTR [DI]
	MOV sheight,EAX
	
	FLD sf
	FIMUL swidth
	FISTP outwidth
	
	FLD sf
	FIMUL sheight
	FISTP outheight
	
	
	
	MOV CX,4
	MOV EAX,swidth
	MOV EDX,0
	DIV CX
	CMP DX,0
	JE K1
	SUB CX,DX
	MOV sbbyte,CL
	JMP K2
K1:	MOV sbbyte,0
	
K2:	MOV EAX,swidth
	MOV CX,3
	MUL CX
	MOV EDX,0
	MOV DL,sbbyte
	ADD EAX,EDX
	MOV srowlength,EAX
	
	MOV CX,4
	MOV EAX,outwidth
	MOV EDX,0
	DIV CX
	CMP DX,0
	JE K3
	SUB CX,DX
	MOV pbbyte,CL
	JMP K4
K3:	MOV pbbyte,0 
	
K4:	LEA DI,bmp
	ADD DI,18
	MOV EAX,outwidth
	MOV DWORD PTR [DI],EAX
	
	ADD DI,4
	MOV EAX,outheight
	MOV DWORD PTR [DI],EAX
	
	MOV EAX,outwidth
	MOV CX,3
	MUL CX
	MOV EDX,0
	MOV DL,pbbyte
	ADD EAX,EDX
	MOV prowlength,EAX
	MOV ECX,outheight
	MUL ECX
	ADD EAX,54
	LEA DI,bmp
	ADD DI,2
	MOV DWORD PTR [DI],EAX	
	
	CALL createh
	
	LEA DX,bmp
	MOV CX,54
	CALL writeh	

;--------------------------------------------------	
A3:	MOV EAX,outheight
	CMP j,EAX
	JAE A5
	FILD j
	FDIV sf
	FIST y1
	FISUB y1
	FSTP v
	
	LEA DI,bdata
	MOV i,0
	
	
B3:	MOV EAX,outwidth
	CMP i,EAX
	JAE C3
	FILD i
	FDIV sf
	FIST x1
	FISUB x1
	FSTP u
	
	MOV AX,x1
	INC AX
	MOV x2,AX
	
	MOV AX,y1
	INC AX
	MOV y2,AX
	
	Rx1y1
	Rx1y2
	
	LEA SI,T1T2
	LEA BX,T3T4
	
	MOV CX,3
	
A4:	MOV AL,[SI]
	MOV AH,0
	MOV p1,AX  ;(x1,y1)
	MOV AL,3[SI]
	MOV AH,0
	MOV p2,AX	;(x2,y1)
	MOV AL,[BX]
	MOV AH,0
	MOV p3,AX	;(x1,y2)
	MOV AL,3[BX]
	MOV AH,0
	MOV p4,AX	;(x2,y2)
	
	FILD p2
	FISUB p1
	FMUL u
	FIADD p1
	FSTP f1
	
	FILD P1
	FIADD p4
	FISUB p2
	FISUB p3
	FMUL u
	FMUL v
	FILD p3
	FISUB p1
	FMUL v
	FADD ST(0),ST(1)
	FADD f1
	
	FISTP ppixel
	FISTP shifang
	MOV AX,ppixel	
	MOV [DI],AL
	INC DI
	INC BX
	INC SI
	DEC CX
	CMP CX,0
	JNE A4
	INC i
	JMP B3
	

C3:	LEA DX,bdata
	MOV ECX,prowlength
	CALL writeh
	
	INC j
	JMP A3
	
	
	
	
A5:	MOV AH,3EH
	MOV BX,handle
	INT 21H
	MOV AH,3EH
	MOV BX,phandle
	INT 21H
	
	LEA DX,convertmsg
	WRITE
	
	FINIT
	
	MOV AH,4CH
	INT 21H
	BEGIN ENDP
	
;----------------------------------------------------------------------
;子函数
openh PROC NEAR
	LEA DX,spathname
	MOV AX,3D00H
	INT 21H
	JC S1
	MOV handle,AX
	RET
S1:	LEA DX,openmsg
	WRITE
	MOV AH,4CH 
	INT 21H
	RET
openh ENDP

movepoint PROC NEAR
	MOV AX,4200H
	MOV BX,handle
	INT 21H
	JC S2
	RET
S2:	LEA DX,movemsg
	WRITE
	MOV AH,4CH 
	INT 21H
	RET
movepoint ENDP

readh PROC NEAR
	MOV AH,3FH
	MOV BX,handle
	INT 21H
	JC S3
	RET
S3:	LEA DX,readmsg
	WRITE
	MOV AH,4CH 
	INT 21H
	RET
readh ENDP

writeh PROC NEAR
	MOV AH,40H
	MOV BX,phandle
	INT 21H
	JC S4
	RET
S4:	LEA DX,writemsg
	WRITE
	MOV AH,4CH 
	INT 21H
	RET
writeh ENDP

createh PROC NEAR
	MOV AH,3CH
	MOV CX,0
	LEA DX,ppathname
	INT 21H
	JC S5
	MOV phandle,AX
	RET
S5:	LEA DX,createmsg
	WRITE
	MOV AH,4CH 
	INT 21H
	RET
createh ENDP
;----------------------------------------------------------------------
	END BEGIN











































⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -