帅气的汇编-CSDN博客

90 阅读2分钟

开发工具包 MASM6.x 

汇编入门级别

打印ASCII

; eg0001.asm in Windows Console
	include io32.inc
	.data
		; 数据定义                                                                                   
line byte 13, 10, 0
	.code
start:
		; 主程序
	mov ecx, 6	  ;外外层循环次数
	mov edi, ' '  ;起始打印位置
f0:  mov edx, ecx ;保存外层循环次数ecx
	mov ecx, 16	 ;内层循环次数
	mov eax, edi ;内层循环起始位置
	mov ah, 1	 ;步长
	call fun	 ;调用子程序输出一行
	mov ecx, edx ;恢复外层循环次数
	add edi, 16	 ;迭代器更新
	loop f0	
	
	exit 0
		; 子程序
fun	proc ;子程序 fun,寄存器传值 al初始值, ah步长,ECX个数,>= 1;dispc输出字符
f1: mov bl, ' '
	xchg al, bl
	call dispc ;输出' '
	xchg al, bl
	call dispc ;输出 al
	add al, ah
	loop f1	
	mov eax, offset line
	call dispmsg	
	ret
fun	endp
	end start
; eg0000.asm in Windows Console
	include io32.inc
	.data; 数据定义
msg	byte '    | 0 1 2 3 4 5 6 7 8 9 A B C D E F', 13, 10, 
		 '--- + -------------------------------', 13, 10,
		 ' 20 | ! " # $ % &', "'", "' ( ) * + , - . /", 13, 10,
		 ' 30 | 0 1 2 3 4 5 6 7 8 9 : ; < = > ?', 13, 10,
		 ' 40 | @ A B C D E F G H I J K L M N O', 13, 10,
		 ' 50 | P Q R S T U V W X Y Z [ \ ] ^ _', 13, 10,
		 ' 60 | ` a b c d e f g h i j k l m n o', 13, 10,
		 ' 70 | p q r s t u v w x y z { | } ~ ', 13, 10, 0
	.code
start:
	mov	eax, offset msg	; 主程序
	call dispmsg 
	exit 0
		; 子程序
	end start


\

寄存器间接寻址

; ***.asm in Windows Console
	include io32.inc
	.data
		; 数据定义
	srcmsg byte 'Are you OK ?', 13, 10, 0
	desmsg byte sizeof srcmsg dup(?)
	.code
start:
		; 主程序
	mov ecx, lengthof srcmsg
	mov esi, offset srcmsg
	mov edi, offset desmsg
f0: mov al, [esi]
	mov [edi], al
	add esi, 1
	add edi, 1
	loop f0
	mov eax, offset desmsg
	call dispmsg
	exit 0
		; 子程序
	end start

\

寄存器相对寻址

; ***.asm in Windows Console
	include io32.inc
	.data
		; 数据定义
	srcmsg byte 'Try your best. Why not?', 13, 10, 0
	desmsg byte sizeof srcmsg dup(?)
	.code
start:
		; 主程序
	mov ecx, lengthof srcmsg
	mov ebx, 0
f0:	mov al, srcmsg[ebx]
	mov desmsg[ebx], al
	add ebx, 1
	loop f0
	mov eax, offset desmsg
	call dispmsg
	exit 0
		; 子程序
	end start

\

\