哈喽,大家好呀~这篇呢我们来看看汇编语言的几个入门小案例。
个人主页:个人主页
系列专栏:日常解决的问题
与这篇汇编相关的文章:
IntelliJ IDEA 常用快捷键 IntelliJ IDEA 常用快捷键(开发效率提升的是不只一点点惹)_一个名叫追的程序猿的博客-CSDN博客_idea循环快捷键 操作系统中几种最最最常见的调度算法 操作系统中几种最最最常见的调度算法(适用于软件设计师考试与期末考试复习)_一个名叫追的程序猿的博客-CSDN博客 解决Oracle的状态: 失败 -测试失败 解决Oracle的状态: 失败 -测试失败: IO 错误: The Network Adapter could not establish the connection_一个名叫追的程序猿的博客-CSDN博客_orcle测试失败
目录
一、开头介绍
二、案例实现
1、Hallo World
2、a + b / a - b
3、循坏累加
4、进制转换器
5、红绿灯
三、总结
首先啥是汇编语言?
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。在汇编语言中,用助记符代替机器指令的操作码,用地址符号或标号代替指令或操作数的地址。在不同的设备中,汇编语言对应着不同的机器语言指令集,通过汇编过程转换成机器指令。特定的汇编语言和特定的机器语言指令集是一一对应的,不同平台之间不可直接移植。
看到这 “哈喽我的” 是不是很熟悉?没错我们学的大多数语言第一个接触到的几乎都是 Hallo World,下面我们来看看代码是如何实现的。(这里我们用的编译工具是 VsCode,插件是MASM/TASM,或者编译工具是 emu8086)
org 100h
mov ax, 3
int 10h
mov ax, 1003h
mov bx, 0
int 10h
mov ax, 0b800h
mov ds, ax
mov [02h], 'H'
mov [04h], 'e'
mov [06h], 'l'
mov [08h], 'l'
mov [0ah], 'o'
mov [0ch], ','
mov [0eh], 'W'
mov [10h], 'o'
mov [12h], 'r'
mov [14h], 'l'
mov [16h], 'd'
mov [18h], '!'
mov cx, 12
mov di, 03h
c: mov [di], 11101100b
add di, 2
loop c
mov ah, 0
int 16h
ret
我们来看下效果
这里举一个 5 + 10 - 1 的一个例子。
org 100h
mov al, 5
mov bl, 10
add bl, al
sub bl, 1
mov cx, 8
print: mov ah, 2
mov dl, '0'
test bl, 10000000b
jz zero
mov dl, '1'
zero: int 21h
shl bl, 1
loop print
mov dl, 'b'
int 21h
mov ah, 0
int 16h
ret
我们看下输出,14 的二进制是 00001110h
这里我们来一个从1 + 2 + 3 + …… + 98 + 99 + 100 的一个样例。
;课堂作业
;计算1+2+...+100
DATA SEGMENT
COUNT DW 0 ;计数
DATA ENDS
STACK SEGMENT PARA STACK
BUF DW 20H DUP (0)
LEN EQU $-BUF
STACK ENDS
CODESEG SEGMENT
ASSUME CS:CODESEG,SS:STACK,DS:DATA
START:
MOV AX,STACK
MOV SS,AX
MOV SP,LEN
MOV AX,DATA
MOV DS,AX
MOV CX,64H
MOV AX,0
S:
ADD COUNT,01H
ADD AX,COUNT
LOOP S
MOV DL,AL
MOV AL,AH
CALL DISP_2_HEX
MOV AL,DL
CALL DISP_2_HEX
CALL DISP_CREF
MOV AH,4CH
INT 21H
DISP_2_HEX:
PUSH AX
PUSH BX
PUSHF
MOV AH,0
MOV BL,10H
DIV BL
CALL DISP_1_HEX
MOV AL,AH
CALL DISP_1_HEX
POPF
POP BX
POP AX
RET
DISP_1_HEX:
PUSH AX
PUSH DX
PUSHF
MOV DL,AL
CMP DL,09
JBE L_1
ADD DL,27H
L_1:
ADD DL,30H
MOV AH,02H
INT 21H
POPF
POP DX
POP AX
RET
DISP_CREF:
PUSH DX
PUSH AX
MOV AH,02H
MOV DL,0DH
INT 21H
MOV DL,0AH
INT 21H
POP AX
POP DX
RET
CODESEG ENDS
END START
这里我们来看下如何实现十进制转换十六进制
#start=simple.exe#
#make_bin#
name "simple"
mov al, 0A7h
out 110, al
mov ax, 1234h
out 112, ax
mov ax, 0
in al, 110
in ax, 112
hlt
我们来看下效果
我们先来看看效果图。
我们在来看看代码
#start=Traffic_Lights.exe#
name "traffic"
mov ax, all_red
out 4, ax
mov si, offset situation
next:
mov ax, [si]
out 4, ax
mov cx, 4Ch
mov dx, 4B40h
mov ah, 86h
int 15h
add si, 2
cmp si, sit_end
jb next
mov si, offset situation
jmp next
situation dw 0000_0011_0000_1100b
s1 dw 0000_0110_1001_1010b
s2 dw 0000_1000_0110_0001b
s3 dw 0000_1000_0110_0001b
s4 dw 0000_0100_1101_0011b
sit_end = $
all_red equ 0000_0010_0100_1001b
三、总结
1、汇编语言可以理解为符号化的机器语言。
2、我们使用 MASM/TASM 插件时,记得在插件的扩展设置里面设置好它的 Assember、Emulator、Mode。不然的话会很折磨。
(求关注)持续更新中……