知识导图 知识导图
首页
iOS知识
计算机软件
  • 即时通讯网 (opens new window)
  • 开发常用网站 (opens new window)
首页
iOS知识
计算机软件
  • 即时通讯网 (opens new window)
  • 开发常用网站 (opens new window)
  • MD

  • Vue

  • C语法

  • C++语法

  • 汇编语言

    • Day1-前言
    • Day2-语言发展
    • intel-32基础语法(上)
    • intel-32基础语法(中)
    • intel-32基础语法(下)
  • 软件编程及算法
  • 汇编语言
2023-01-17

Day1-前言

# 前言

前言

编程语言:

机器语言 ----> 汇编语言 ----> 面向过程语言(比如C) ----> 面向对象 C++ 等 ---> 。。。

汇编语言作为一门低级语言,其实它的语法更简单,但是代码可读性就会越差,代码的维护性就会越差,维护困难的语言不利于大型项目的开发,程序员的开发难度、项目的维护成本就会加大

这样高级语言的快速发展成为必然

因此,想要学习汇编不能单纯背诵语法,没有实战项目的需要,很快就会忘的一干二净

为啥要学汇编语法?

局部变量是怎么存储的,内存怎么分区的,函数是如何调用的,程序又是如何启动的 等等 ?

当你学完c 或者其他高级语言后,尽管您已经熟练掌握并且开发了较为复杂的软件,但是依然有种对编程语言底层运行机制的陌生感,恰好又想去了解一下,那么就需要学习一下汇编了

每个人学习的动机不同,应该根据自己的学习动机来确定学习的目标

储备

学汇编语法前提是需要有一点编程基础的,只要有过开发经历的同学都可以进行学习,否则建议先了解一下高级语言,或者 c 语言语法 本文将通过对比c 语言来了解汇编语言,为进一步深入了解其他语言

# Hello World!

按照国际惯例,不管是编程语言,还是编程软件,先来个 Hello World! 吧

网上找一个在线编译的网站,有很多,我随便找一个如下:

打开网站 https://www.nhooo.com/tool/assembly/

映入眼帘的就是默认展示一段 输出 Hello World! 的汇编代码

section    .text
    global _start       ;must be declared for using gcc
_start:                     ;tell linker entry point
    mov edx, len    ;message length
    mov ecx, msg    ;message to write
    mov ebx, 1      ;file descriptor (stdout)
    mov eax, 4      ;system call number (sys_write)
    int 0x80        ;call kernel
    mov eax, 1      ;system call number (sys_exit)
    int 0x80        ;call kernel

section .data

msg db  'Hello, world!',0xa ;our dear string
len equ $ - msg         ;length of our dear string

(运行结果没反应,八成是在线服务不支持了。。。😓,很多在线编译器都关闭了汇编的支持)

接着去一顿搜索,发现有说使用VsCode 比较方便,然后跟着下载安装,给我的一个示例是这样的:

data SEGMENT
    hello  DB 'Hello World!$' ;注意要以$结束
data ENDS
code SEGMENT
    ASSUME CS:CODE,DS:DATA
start:
    MOV AX,data  ;将data首地址赋值给AX                
    MOV DS,AX    ;将AX赋值给DS,使DS指向data
    LEA DX,hello ;使DX指向hello首地址
    MOV AH,09h   ;给AH设置参数09H
    INT 21h      ;执行AH中设置的09H号功能。输出DS指向的DX指向的字符串hello
    MOV AX,4C00h ;给AH设置参数4C00h
    int 21h      ;调用4C00h号功能,结束程序
code ENDS
END start

右键代码文件,运行当前文件,结果正常打印 Hello World!

咋和前面示例语法不一样呢???

于是搜索 汇编 Hello World! 示例代码,乖乖

有这样的:

[bits 64]
    global _start
 
    section .data
    message db "Hello, World!"
 
    section .text
_start:
    mov rax, 1
    mov rdx, 13
    mov rsi, message
    mov rdi, 1
    syscall
 
    mov rax, 60
    mov rdi, 0
    syscall

还有这样的:

bdos    equ    0005H    ; BDOS entry point
start:  mvi    c,9      ; BDOS function: output string
          lxi    d,msg$   ; address of msg
          call   bdos
          ret             ; return to CCP
msg$:   db    'Hello, world!$'
end     start

可以说是多姿多彩,百花齐放。。。

眼花缭乱。。。

😓 我菜了的,显示一个字符串都这么复杂,从零到放弃!

明天再说,再见!

C++高级教程(下)
Day2-语言发展

← C++高级教程(下) Day2-语言发展→

Theme by Vdoing
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式