前言:
计组课本需要学习汇编,可惜自己看不太懂。这里发现一个学习方法交给大家。其实新手可能一些抽象表示难理解,这里我把我学习的疑问点以及思路记录一下。
要点:
这里我以题为例给大家分析
- 输出输入对应大写字母的小写字母
我们需要简单知道常用寄存器的作用。
1.通用寄存器 ax,bx,cx(和loop绑定),dx
输入输出寄存器:al (输入字符到的寄存器),dl输出字符到的寄存器
指令寄存器:ah(用于输入指令的寄存器,如输入1为输入,2为输出,4ch为结束),
dos
START:
MOV AH,1
INT 21H
CMP AL,'A'
JL A1
CMP AL,'Z'
JG A1
ADD AL,32
MOV DL,AL
MOV AH,2
INT 21H
A1:
; 退出程序
MOV AH, 4Ch ; AH=4Ch 表示程序退出
INT 21H ; 调用 DOS 中断 21H 退出程序
-
首先我们需要输入字符,输入的字符默认在AL寄存器中
-
然后我们进行比较,如果输入的值小于A的对应Ascii值或者大于z的值就跳转到结束标志位。
-
COP 接两个数,后面接比较调节,可以实现条件转移,就是c语言中的if语句。
-
A1是自定义的标志位,相当于c语言中的函数。这里我定义了一个退出程序的语句。
-
int21,中断信号,相当于执行操作的必要流程。
-
Ah寄存器的作用,存入1代表输入,存入2代表输出。这个相当于一个调用系统功能的寄存器,和 INT 21一般连用。
-
为什么汇编数字后要加h?
在汇编语言中,添加 "h" 后缀通常用于表示一个十六进制数。在汇编语言中,常用的数值表示法包括:
十进制表示法:例如,10 表示十进制整数。
十六进制表示法:在数值后面添加 "h" 后缀,例如,10h 表示十六进制整数,相当于十进制的16。
二进制表示法:在数值前面添加 "0b" 或 "0B" 前缀,例如,0b101 表示二进制整数,相当于十进制的5。
八进制表示法:在数值前面添加 "0" 前缀,例如,010 表示八进制整数,相当于十进制的8。
在汇编语言中,加上 "h"
后缀可以帮助编程人员清楚地知道一个值是以十六进制表示的,而不是十进制或其他进制。这种表示法的使用可以提高代码的可读性,特别是在处理内存地址、寄存器值和其他底层硬件相关的数值时。在大多数汇编语言中,编译器或汇编器可以根据上下文来确定数值的进制,但明确指定进制可以减少歧义。
例如,10h 表示一个十六进制数,而 10 可能表示一个十进制数。这种约定有助于程序员正确理解和处理数据。
那么基础知识知道了,可以写一个变体题
输出A-Z 26个字母
bash
START:
; 初始化循环计数器 CX
mov cx, 26
mov dl,'A'
loop_start:
; 在这里放置循环体的代码
;输出字符
int 21h
;加1
add dl,1
; 递减循环计数器 CX
loop loop_start
; 循环结束
; 退出程序
mov ah, 4Ch
int 21h