关于汇编语言入门的几个案例

简介: 汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。在汇编语言中,用助记符代替机器指令的操作码,用地址符号或标号代替指令或操作数的地址。在不同的设备中,汇编语言对应着不同的机器语言指令集,通过汇编过程转换成机器指令。特定的汇编语言和特定的机器语言指令集是一一对应的,不同平台之间不可直接移植。...

 哈喽,大家好呀~这篇呢我们来看看汇编语言的几个入门小案例。



一、开头介绍

首先啥是汇编语言?

汇编语言(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

image.gif

我们来看下效果

image.png

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

image.gif

我们看下输出,14 的二进制是 00001110h

image.png

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

image.gif

image.png

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

image.gif

我们来看下效果

image.png

5、红绿灯

我们先来看看效果图。

3.gif

我们在来看看代码

#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

image.gif

三、总结

1、汇编语言可以理解为符号化的机器语言。

2、我们使用 MASM/TASM 插件时,记得在插件的扩展设置里面设置好它的 Assember、Emulator、Mode。不然的话会很折磨。



相关文章
|
4月前
|
存储 移动开发
单片机----汇编语言入门知识点
单片机----汇编语言入门知识点
59 2
|
程序员
汇编基础语法和指令总结+案例(用32位汇编实现插入排序)
汇编基础语法和指令总结+案例(用32位汇编实现插入排序)
136 0
|
存储
【汇编】用栈传参的案例及分析
【汇编】用栈传参的案例及分析
40 0
|
存储 移动开发 前端开发
linux内核1-GNU汇编入门_X86-64&ARM(下)
linux内核1-GNU汇编入门_X86-64&ARM(下)
|
存储 前端开发 rax
linux内核1-GNU汇编入门_X86-64&ARM(上)
linux内核1-GNU汇编入门_X86-64&ARM
|
Java 数据库 Python
浅浅的学习一下汇编技术入门基础知识,隔壁家的小孩都学哭了。
我们的计算机知识就像一座金字塔,底层是数学,上面是数字电路,然后是汇编,再往上是操作系统、网络,数据库、高级编程语言、框架等等…我们不可能精通这个金子塔的每一层, 但是想走的更远就必须要了解这个金字塔的底层。因此,学习汇编并不是为了用汇编在应用层设计程序,而是为了深刻理解机器运行程序的机理。就像对于人来说不能没有常识一样,尽管常识不能直接挣钱吃饭,但它影响谈吐,影响你的判断力和决断力,决定着你接受新事物和新知识的程度。汇编就是计算机语言里面的常识和基础。
浅浅的学习一下汇编技术入门基础知识,隔壁家的小孩都学哭了。
对X86汇编的理解与入门
本文描述基本的32位X86汇编语言的一个子集,其中涉及汇编语言的最核心部分,包括寄存器结构,数据表示,基本的操作指令(包括数据传送指令、逻辑计算指令、算数运算指令),以及函数的调用规则。个人认为:在理解了本文后,基本可以无障碍地阅读绝大部分标准X86汇编程序。
1133 0
|
4月前
|
存储 Unix 编译器
汇编语言----X86汇编指令
汇编语言----X86汇编指令
91 1
|
4月前
|
存储 机器学习/深度学习 移动开发
汇编语言指令系列
汇编语言指令系列
204 0
|
2月前
|
存储 机器学习/深度学习 芯片
8086 汇编笔记(十二):int 指令 & 端口 & 直接定址表
8086 汇编笔记(十二):int 指令 & 端口 & 直接定址表