哈喽,大家好呀~这篇呢我们来看看汇编语言的几个入门小案例。
磊个人主页:个人主页
賂系列专栏:日常解决的问题
雷与这篇汇编相关的文章:
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)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。在汇编语言中,用助记符代替机器指令的操作码,用地址符号或标号代替指令或操作数的地址。在不同的设备中,汇编语言对应着不同的机器语言指令集,通过汇编过程转换成机器指令。特定的汇编语言和特定的机器语言指令集是一一对应的,不同平台之间不可直接移植。
二、案例实现
1、Hallo World
首先啥是汇编语言?
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。在汇编语言中,用助记符代替机器指令的操作码,用地址符号或标号代替指令或操作数的地址。在不同的设备中,汇编语言对应着不同的机器语言指令集,通过汇编过程转换成机器指令。特定的汇编语言和特定的机器语言指令集是一一对应的,不同平台之间不可直接移植。
1、Hallo World
看到这 “哈喽我的” 是不是很熟悉?没错我们学的大多数语言第一个接触到的几乎都是 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
我们来看下效果
2、a + b / a - b
这里举一个 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
3、循坏累加
这里我们来一个从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
4、进制转换器
这里我们来看下如何实现十进制转换十六进制
#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
我们来看下效果
5、红绿灯
我们先来看看效果图。
我们在来看看代码
#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。不然的话会很折磨。
(求关注)持续更新中……



