汇编入门级别
打印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
\
\