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

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

 个人主页:个人主页                          

系列专栏:日常解决的问题              

与这篇汇编相关的文章:                  

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张图片

二、案例实现

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张图片

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张图片

 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张图片

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张图片

 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。不然的话会很折磨。

(求关注)持续更新中……

关于汇编语言入门的几个案例_第6张图片

你可能感兴趣的:(日常学习上的分享,c++,开发语言,汇编语言,emu8086,vscode)