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

📄 a8-2.asm

📁 A1.asm 显示程序实验 STACK1 SEGMENT STACK DW 256 DUP(?) STACK1 ENDS DATA SEGMENT USE16 MES1 DB
💻 ASM
字号:
;A8-2.asm
;综合程序设计实验-码制转换实验

.386
STACK1  SEGMENT STACK   USE16 
	DB	64	DUP(?)
STACK1  ENDS

DATA	SEGMENT	USE16
MES0    DB   'This is tangdu speaking!$'
MES1	DB	 'Show this sentence as hex:$'
BUF     DB   65    DUP(?)
DATA	ENDS

CODE	SEGMENT	USE16
	ASSUME	CS:CODE,DS:DATA
	
START: MOV 	AX,DATA
	   MOV	DS,AX

	   MOV	DX,OFFSET MES0	       ;Show "This is tangdu speaking!"
	   MOV	AH,09H
	   INT 	21H
	   CALL	KENTER			
	   MOV	DX,OFFSET MES1	       ;Show Sentence as hex
	   MOV	AH,09H
	   INT 	21H
	   CALL	KENTER	
	   CALL	SAHEX
	   MOV	DX,OFFSET BUF
	   MOV	AH,09H
	   INT 	21H
	   CALL	KENTER	

	   MOV	AH,4CH
	   INT	21H

SAHEX	PROC	NEAR
CBYTE   =24
	   PUSHAD				      ;将所有32位寄存器压栈
	   MOV	DI,OFFSET MES0
	   MOVZX EDI,DI			      ;零扩展指令
	   MOV	AX,DATA
	   MOV	GS,AX			      ;使用GS段
	   MOV	SI,OFFSET BUF
	   MOVZX ESI,SI
	   MOV	ECX,CBYTE
C1:	   MOV	AL,DS:[EDI]
	   AND	AL,0F0H			      ;取高4位
	   SHR	AL,4
	   CMP	AL,0AH			      ;是否是A以上的数
	   JB	C2		
	   ADD	AL,07H		
C2:	   ADD	AL,30H		
	   MOV	GS:[ESI],AL
	   MOV	AL,DS:[EDI]
	   AND	AL,0FH			      ;取低4位
	   CMP	AL,0AH
	   JB	C3
	   ADD 	AL,07H
C3:	   ADD	AL,30H
	   MOV	GS:[ESI+1],AL
	   MOV	BYTE PTR GS:[ESI+2],20H	;在每个字符间加入空格
	   ADD	ESI,3
	   INC	EDI
	   LOOP	C1
	   MOV	BYTE PTR GS:[ESI],24H	;在串尾加上$符
	   POPAD				      ;弹出所有寄存器值
	   RET
SAHEX	ENDP

KENTER	PROC	NEAR
	   MOV	DL,0AH
	   MOV	AH,02H
	   INT	21H
	   MOV	DL,0DH
	   MOV	AH,02H
	   INT	21H
	   RET
KENTER	ENDP
CODE  ENDS
	   END	START

⌨️ 快捷键说明

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