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

📄 32060624_王克_asmhomework_2.asm

📁 汇编语言 参考书 包含作业与答案 从入门到精通 通俗易懂
💻 ASM
字号:
;----------------------------------------------------------------
;        ╭══════┤    32060624___王克	         ├═════╮
;        ║          						     ║
;        ║             					     ║
;       ║              ★ 汇编语言 第二次作业 ★                   ║
;       ║      |---------------------------------------------|     ║
;       ║ 							     ║
;        ║        ;双字相乘(32位)    X3  =  X1  *  X2           ║ 
;        ║        ;以16进制显示结果 				     ║
;	 ║	   ;以10进制显示结果 				     ║
;        ║                               2004.10.30                 ║
;        ║                                                          ║
;        ╰ ════════════════════════════╯
;━┅━┅━┅━┅━┅━┅━┅━┅━━┅━┅━┅━┅━┅━┅━┅━━┅━┅━━┅━
.model small
.stack 100h
.DATA
	X1	Dword	0ffffffffH
	X2	Dword	0ffffffffH
	X3	WORD	4 DUP(0),'$'        ;X1 * X2 = 0ffff fffe 0000 0001h
	RESULT10	BYTE	25 DUP(0),'$'
	DISP16_MSG	BYTE	'The result in Hex is:   ','$'
	DISP10_MSG	BYTE	0DH,0AH,'The result in DEC is:   ','$'
.code
.startup
;-------------------------------------------------
MAIN	PROC    FAR
	MOV	AX,@DATA
	MOV	DS,AX

	CALL	DMUL		;双字乘法

	MOV	DX,OFFSET DISP16_MSG
	MOV	AH,09H
	INT 21H
	CALL 	DISPLAY16	;以16进制输出

	MOV	DX,OFFSET DISP10_MSG
	MOV	AH,09H
	INT 21H	
	CALL	DISPLAY10	;以10进制输出

.exit
MAIN	ENDP	
;------------------;双字乘法-------------------------
DMUL	PROC	NEAR
					;两低字相乘
	mov	bx,word ptr x1
	mov	ax,word ptr x2
	mul 	bx
	mov	X3,ax
	mov	X3+2,dx

	mov	ax,word ptr x2+2	;低字乘*高字
	mul 	bx
	add 	X3+2,ax
	adc	X3+4,dx
	adc	X3+6,0			;加进位

	mov	bx,word ptr x1+2	;高字乘*低字
	mov	ax,word ptr x2
	mul 	bx
	add 	X3+2,ax
	adc	X3+4,dx
	adc	X3+6,0			;加进位
					
	mov	ax,word ptr x2+2	;两高位相乘
	mul 	bx
	add	X3+4,ax
	adc	X3+6,dx

	RET
DMUL ENDP
;------------------;以16进制输出---拷贝EXP51.asm-----------------
DISPLAY16	PROC	NEAR
	MOV	CX,4		;外层计数器,4个字
	LEA	SI,X3+6
NEXTWORD:
	PUSH	CX		;保存计数器值
	MOV     BX,[SI]
        MOV     CX,4
;;;;;;;;;;;;;;;;;;;        
CONVERT:
	PUSH    CX		;保存内层计数器	
        MOV     CL,4	
        ROL     BX,CL
        MOV     AL,BL
        AND     AL,0FH
        or      AL,30H		;转化为ASCII码
        CMP     AL,39H
        JBE     DISP
        ADD     AL,'A'-'9'-1	;大于9则用ABCDEF表示
DISP:
	MOV     DL,AL
        MOV     AH,2
        INT     21H		;显示一个字符
        
        POP     CX
        LOOP    CONVERT
;;;;;;;;;;;;;;;;;;;;
	DEC	SI
	DEC	SI
	POP	CX
	LOOP	NEXTWORD	;开始第二个字的显示
	
        RET        
DISPLAY16 ENDP
;---------------------;以10进制输出------------------------
DISPLAY10	PROC	NEAR
	LEA	SI,RESULT10+24
	MOV	CX,25
	MOV	BX,10
DIV10:				;一个循环求一位值,先得到最低位
	MOV	AX,X3+6
	XOR	DX,DX
	DIV	BX
	MOV	X3+6,AX

	MOV	AX,X3+4
	DIV	BX
	MOV	X3+4,AX

	MOV	AX,X3+2
	DIV	BX
	MOV	X3+2,AX

	mov	AX,X3
	DIV	BX
	MOV	X3,AX

	XOR	DL,30H
	MOV	[SI],DL		;此时余数即为实际值,最低位
	DEC	SI
	LOOP	DIV10
	
	MOV	SI,OFFSET RESULT10
NEXT:				;跳过前边无用的0
	MOV	AL,[SI]
	CMP	AL,30H
	JNE	PRINT
	INC	SI
	JMP	NEXT
PRINT:	
	MOV	DX,SI		;从不为0的位开始全部打印
	MOV	AH,09
	INT 21H

	RET
DISPLAY10 ENDP
;------------------------------------------------------------
END

⌨️ 快捷键说明

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