第5/6 汇编伪指令及程序设计(Pro)

2023-10-23 19:50

本文主要是介绍第5/6 汇编伪指令及程序设计(Pro),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

考点1        标号和变量的命名和用法

考点2        伪指令的类型和功能

(1)段定义

 (2)数据定义:

考点3        DOS功能调用的应用

考点4        汇编语言程序编程

        例1:编程实现求S=(X2+Y2)/z的值,并将结果放入RESULT单元。DATA SEGMENTX DB 2Y DB9Z DB 6RESULT DB?DATA ENDS

考点5        子程序的相关知

考点6        汇编A程序上机过程     

.asm

.obj

.exe           

        总结   


考点1        标号和变量的命名和用法

        1.定义

                  变量:存储单元中数据的地址

                                        Str 内存单元的首地址

               变量名:在程序运行中随时可以通过变量名访问内存

                                         ;变量名    内容

        变量的三个属性:段属性、偏移属性、类型{DB,DW,DD}属性

                                        地址

        变量名伪指令 表达式1,表达式2,

        标号:存储单元中指令的地址

                是指令性语句存放在丙存的地址的符号表示

                常用于指令的转移和子程序调用。

标号有三个属性:

                        段地址、偏移地址和类型(NEAR、 FAR)。

标号使用格式:

                        标号:指令语句

2.命名规则由字母

        (大/小写):数字及特殊符号(_$?@%)组成,

        第一个字符不能是数字

        一个源程序中,用户定义的标示符必须

        合法: abc, HAO,_100, %123, x_1,

        不合法: #123,*100, 2019Y,1_2, ADD, BX

                        (保留字不能用)

  汇编语言基础标识符由长度不超过31个字符的字符串组成。

考点2        伪指令的类型和功能

        在汇编过程中不产生指令码,只用来表示汇编程序如何汇编的指令是()。
        A. 汇编指令

        B.机器指令

        c. 伪指令

        D. 宏指令

(1)段定义

                                        {一个完整的汇编程序都要有段

                                       cpu内部        DS,CS,SS,ES 保存的内存单元的首地址

                                          内存保存程序     4个段构成         }

        段名        Segment  [定位类型]  [组合类型]  [ '类别' ]
        段名        ENDS

段的属性

stack        Segment         PARA         STACK         'stack'

段名        Segment         [定位类型] [组合类型] ['类别']        {题干中如果不要求 ,[] 都可以省略}

定位类型:段起始边界对内存空间的要求,

                PAGE、 PARA、 WORD、 BYTE。{页,节,字,字节}

                PARA为隐含的定位方式,段首址的低4位为0{二进制 四位  十六进制 1位},即“节”边界。

组合类型:指示段与段之间怎样连接和定位。

                一般有PUBLIC、STACK、 NONE默认。

类别:是用单引号括起来的字符串,类别相同的放在连续的存储区例如'CODE'、 'STACK' 。

定位参数

通知连接程序,逻辑段的目标代码在存储器中将怎么存放。

4种方式

        (1)BYTE,逻辑段可以从任意地址处开始存放。

        (2) WORD,逻辑段须从偶地址开始存放。

        (3) PARA,逻辑段须从一个能被16整除地址开始存放。

        (4) PAGE,逻辑须段从一个能被256整除地址开始存放。

组合参数

        不同源程序中,同名程序段的连接方式。

                PUBLIC:通知链接程序,把不同模块中具有PUBLIC属性的同名段,在满足定位方式的前提下,组成一个逻辑段。

                STACK:把不同模块中具有STACK属性的同名段链接成一个大的堆栈段。链接后堆栈段的空间是链接前各模块预留堆栈空间之和。

AT:逻辑段在定位时,其段基址等于表达式给出的值。AT属性常和ORG伪指令配合。

Dseg        SEGMENT AT 0040H                    ;段地址  0040ORG        0017H        ;有效地址Tmp                DB        ?Dseg        ENDS

AT参数不能在代码段中使用。      CS:IP  CPU指令

缺省:该段是一个独立的段,不进行链接。

类别

        数据段—‘Data’

        代码段——‘Code’

        堆栈段—‘Stack’

段定义举例

        Dseg Segment         'data

                Buf db 'l am a student','$'

        Dseg Ends

相邻段地址之间的最小距离为( )。

A、16个字节

B、64K字节

C、1K字节

D、256字节

DAT SEGMENT STCK  'STACK'

                        DW 100 DUP(0)

DATA ENDS                

此处定义的含义是()。

A.定义100个字节的堆栈段

B.定义100个字节的数据段

c.定义200个字节的堆栈段

D.定义200个字节的数据段

 (2)数据定义:

简答变量的三个属性是什么?

        段属性:所在段的段地址

        偏移属性:段内偏移地址

        类型属性:每个数据项的字节数。

                比如,DB类型值为1,

                          DW类型值为2,

                          DD类型值为4。

数值回送运算符分别是SEG, OFFSET, TYPE

        DB、DW、DD的区别

例1:在数据定义中,定义字符串时,应使用的伪指令是()

        A. DB         B. DW         C. DD        D.DQ
————————————————————————————————————————

        STR        DB        ‘abcde’

        STR        DB        ’a‘‘b’‘c’‘d’’e'

例2.在BUF DB 2 DUP (0,0,30H,0,30H )定义的数据单元中,能够成为3000H的字存储单元有d多少个  

如果有以下定义域句

        BVAR        DB 101B,7, 'D' ,OFH,-1,2×56,

        则BVAR+4内存单元中的字节内容是

例4:下列变量各占多少字节?

A1 DW 23H,5876H

A2 DB 3 DUP (?),OAH,ODH, '$'

A3 D 5 DUP(1234H, 567890H)

A4 DB 4 DUP(3 DUP(1, 2,ABC))

DB DW        S1 DB         `a'

                    S2 DBU         'a'

                     S3 DB         ‘ab’

                     S4 DW         ’ ab‘

                       S5    DB      'abc'

                        S6   DW     `abc'     X

例5:执行下列指令后, AX寄存器的内容是什么?
      

  TABLE DW , 100, 200, 300, 400DISTA DW 6

(1)   MOV BX, OFFSET TABLE

        ADD BX, DISTA

        MOV AX, [BX]

(2) LEA BX,TABLE

        MOV AX, 2[BX]

(3)    MOV SI,

        4MOV BX, OFFSET TABLE

        MOV AX, [BX][SI]

(4)    MOV BX, DISTA

        MOV AX, TABLE[BX]

300 100 200 300

        下列指令执行后,AX= 4141H       DX=  6162H

B1        DB        'ABC'

W1        DW        'ab'

                .....

                MOV        AL,B1

                MOV        AH,B1

                MOV        DX,W1

——————————————————————————

与字定义不同的是      W2    DW ,'a','b'

0061,0062

w1 dw 'ab'   一个字 占用两个字节     

w2 dw 'a','b'  两个字  占用  4 个字节 

 S1 12345678

S2 0012003400560078

总结DB、DW、DD

请分别用DB,DW、 DD伪指令写出在BUF开始的连续8个单元中依次存放数据:

11H、22H、33H、44H、55H、66H、77H、88H的数据定义语句。

11
22
33
44
55        
66
77
88

s1  db = 11,22,33,44,55,66,77,88

s1   dw = 2211,4433,6655,8877

s1   dd = 44332211,88776655

已知BX=2,指出下列程序执行后AL寄存器的内容。
 

DATA SEGMENTVARI = 10 MOD 7        ;    3    MOD 取余   符号定义伪指令    =  和 EQU  VAR2 EQU 10H           ;    16    符号定义不占用内存VAR3 DB VAR2 DUP (30H)        ;在内存当中   从VAR3开始占用内存VAR4 DB 20H,10H,80HDATA ENDS

(1) MOV AL, VARI        ;AL=

(2) MOV AL ,VAR2        ;AL=

(3) MOV AL , VAR3        ;AL=

(4) MOV AL, VAR4 [BX]         ;AL=CE

BUF DW 10 DUP(3 DUP(2,10H),3,5)

上述语句汇编后,为变量BUF分配的存储单元字节数是()

A.10B.80C.100D.160

已定又数据段如下。能使AX中数据为偶数的语句是()

DATA SEGMENTORG 0213HDA1 DB 15H, 26H, 37HAD2 DW DA1
DATA    ENDS

A. MOV AX, WORD PTR DA1

B. MOV AL, DA1 +2

C. MOV AL, BYTE PTR AD2+1

D. MOV AX, WORD PTR DA1+1专接本INCE

ARY DW 10 DUP (?)     ;定义了一个字变量   10个空........MOV AL, TYPE ARY        ;类型属性MOV BL, LENGTH   ARY    ;长度属性MOV CL, SIZE ARY        ;大小属性

上述指令执行后的AL=2 , BL=  10      CL=20

Length:用于变量的前面,返回数组变量的元素个数,即返回

        DUP ()最外层的数值

        没有DUP,则返回1。G

SIZE:返回数组变量所占的总字节数
                SIZE=leng*type 

                             10       2

已知 VAR DW 1,2, $+2,5,6若汇编时VAR分配的偏移地
址是0010H,则汇编后0014H单元的内容是().16HAR DW 1,2
AR2 DW 3C     equ    $-var
s    equ    var2-var    0014-0010    S=4

(3)符号定义

        符号定义EQU不占用内存空间
{

                立即数寻址

                不占内存

}

1段定义:ends

2 数据:db  dw  dd

        PTR,$,TYPE

                    length       

                     size

         dup,?
————————————————————

END                ;源程序的结束

ENDS                ;段的结束

ENDP                ; 过程的结束

ENDM                ;  宏指令的结束

:(4)过程定义

        过程的属性:near,far

过程名   proc     [  near,far ]   ;省略的话  默认是 近  ,如果用 调用远的话,后面需要加far


过程名    endp    ; p对应前面过程的保留字     结束的微指令  end

(5) 程序结束 END

        源程序的结束

DATA SEGMENT
A DW O            ;定义变量
B DW O
C DW 100,20,50
DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA  ;定义代码段 和数据段MAIN PROC FAR            ;定义了一个过程  起始位置  过程名字  proc 远调(和dos程序)PUSH DS            ;DS压栈XOR AX, AX          ;把AX 0压栈    可以变成MOV    AX ,0PUSH AXMOV AX, DATA    ;这两条一定要写,不然CPU找不到段MOV DS, AXMOV BX, OFFSET CMOV AX, [BX]MOV B, AX    MOV AX, 2[BX]ADD AX, BMOV A, AXRET    ;   一定要有RETMAIN ENDP                    ;过程结束位置 CODE ENDS                ;段结束END                        ;源程序的结束

没有ORG起始地址 默认从0地址开始

有ORG 从指定的位置开始

call    Z1        proc

                push        ax

                push        bx

                .........

                pop        bx

                pop        ax

                ret                  ;自动弹出断点 

          Z1        ENDP

INT        21H        ;psw    cs,ip

inet                        ;IP        CS        PSW

————————————————————

CALL     Z1:    压的是  CS;IP 

                        段间  CS

                        段内        IP

中断调用 和  子程序调用的区别

(6)ASSUME

关联段名

指定段寄存器段名关联

必须由用户在程序开始时编写代码完成装入。


 

cs:code    ;指定带代码段  ds: date    ;指定到数据段
。。。。。。。MOV    AX,dateMOV    DS,AXMOV    DS,DATE   ;是不合法的   立即数 DATE 

    (7)ORG微指令

        ORG数值表达式

例:ORG 20H

BUF DW 0012H, 5678H

执行MOV AX,BUF+2后,AX的值为

        LEA BX,BUF+2后,BX的值为

DATA SEGMENTD1    EQU 0100HORG 2300HD2   DW 35ABH
DATA ENDS
CODE SEGMENTASSUME CS:CODE, DS:ATA
START:MOV AX,SEG D1 /DATaMOV DS, AXMOV BX, 2000HMOV SI, 0200HMOV DX, D1 [BX] [SI]     基址变址相对寻址LEA BX, D1 [BX] [SI]
MOV AH, 4CHINT 21Η
CODE ENDSEND START——————————————————
DX=35ABH    BX=2300

考点3        DOS功能调用的应用

            INT        21H
                                {

                                        MOV        AH,1        ;键盘接收

                                        MOV        AH,2        ;屏幕显示单个字符

                                        MOV        AH,9        ;屏幕显示字符串

                                        MO          AH,4CH        ;返回DOS环境

}    

功能都在 AH中 

考点4        汇编语言程序编程

1.汇编程序注意事项:

        每行最多4个组成部分;

        双操作数时,中间不能丢掉逗号;

        程序至少有一个代码段

        结束程序指令并返回操作系统的方法有两种

                        PUSH    DS

                        XOR        AX,AX

                        PUSH        AX

                                .....

                        RET

MOV        AH,4CH

INT                21H

2.汇编语言源程序的基本格式:        

        DATA        SEGMENT

        DATA        ENDS

        EXTRA        SEGMENT

        EXTRA        ENDS

        STACK        SEGMENT        PARA        STACK

        STACK        ENDS

CODE SEGMENTASSUME CS: CODE, DS: DATA, SS: STACK, ES: EXTRA   ;全部进行了指定
START: MOV AX, DATA      ;都是立即数MOV DS, AXMOV AX, EXTRAMOV ES, AXMOV AX, STACKMOV SS, AXMOV AH, 4CHINT 21H
CODE ENDSEND START

        例1:编程实现求S=(X2+Y2)/z的值,并将结果放入RESULT单元。DATA SEGMENTX DB 2Y DB9Z DB 6RESULT DB?DATA ENDS

CODE SEGMENTASSUME CS:CODE,DS:DATA
START:MOV AX,DATAMOV DS,AX                                ;XOR    AX,AX     ;清0MOV AL,X                                ;MOV    AX,XMOV BL,AL                                ;MUL    XMUL BLMOV DX,AXMOV AL,YMOV BL,ALMUL BLADD AX,DXMOV BL,ZDIV BL                                ;AX/BL——商AL,余AHMOV RESULT,ALMOV AH,4CHINT 21H    
CODE ENDSEND START

例2:请写出汇编语言程序实现如下功能:

从键盘输入1~5中的任何一个数,分别在屏幕上显示"1st"、" 2st"、“3st"、”4st"、" 5st"其他字符则显示“*”


利用字符串输出

DATA SEGMENT BUF DB  'st','$'    ;9号功能定义的字符串  一定要 $符号结束的   显字符串的一种标志
DATA ENDS
CODE SEGMENTASSUME DS:DATA,CS:CODE
START:MOV AX,DATAMOV DS,AXMOV AX,0MOV AH,01HINT 21HMOV AH,02HCMP AL,'1'JB L1 CMP AL,'5'JA L1MOV DL ,ALINT 21HLEA DX,BUF    ;有效地址 一定要给DXMOV AH,09H    ;利用9号功能一定要定义INT 21HJMP EXITL1:MOV DL,'*'INT 21HEXIT:MOV AH,4CHINT 21H
CODE ENDSEND START	

伪指令不占用内存

START 开始 

例3:编写完整程序:

        将键盘输入的小写字母转换成大写字母并输出显示,直到输入字符'#结束

        如果输入的不是小写字母时要显示错误提示PLEASE INPUT AGAIN!'。

DATA SEGMENTERROR DB '请再一次输入!', ODH, OAH, '$' 
DATA ENDS
CODE SEGMENTASSUME CS:CODE, DS:DATASTART: MOV AX, DATAMOV DS, AXNEXT:MOV    AH,1     ;利用1号功能接收字符INT    21H      ;     CMP    AL,'#'     ;和#进行比较JE     EXIT        ;如果是 就EXITCMP AL,'a'       ;小于小A             JB    ERR    ERR:LEA    DX,ERROR   ;返回  再一次输入MOV    AH,9INT    21H    JMP    NEXTEXIT:MOV    AH,4CHINT    21HCMP   AL,'z'JA    ERRSUB    AL,20HMOV    DL,ALMOV    AH,2INT    21HJMP    NEXT    
CODE ENDSEND START

例4:17

        编写完整汇编语言程序实现如下功能。

在M单元和N单元分别存有一个8位无符号数36H和95H,

要求比较这两个无符号数,并根据比较结果在屏幕上显示M>N或N>M (假设这两个数不相等) 。

data segmentM DB 36HN DB 95H
STR1 DB 'M>N', '$'
STR2 DB 'N>M', '$'
data ends
code segmentassume ds:data,cs:code 
start: MOV AX,DATA MOV DS,AXMOV AL,MMOV BL,NCMP AL,BLJA L1LEA DX,STR2JMP L2
L1: LEA DX,STR1
L2: MOV AH,09HINT 21HMOV AH,4CH INT 21H
code endsend start

例5 :用汇编语言编写程序,从外设71H读取一个数M,判断其值是否在10和20之间,

如果M2 20,则送OFFH给外设73H

如果M<10,则送00H给外设73H;

如果10<M<20,则送88H给外设73H。

CODE SEGMENTASSUME CS:CODE
START: IN AL,71HCLCCMP AL,10JC    LP1CMP AL,20JC    LP2MOV BL,OFFHJMP LP3LP1:MOV BL,0JMP LP3LP2:MOV BL,88HLP3: MOV AL,BLOUT 73H,ALMOV AH,4CHINT 21HCODE ENDSEND START

例6

        在内存单元BUF中存放着一个8位有符号二进制数X,试根据关系,用8086汇编语言编写程序求Y值,并将结果存入RESU单元: X大于0时,Y为1; X等于0时,Y为0;X小于0时,Y为-1

data Segmentbuf    DB    5result    DB    ?
data    ends
code    Segmentassume    cs:code,ds:datastart:mov mov,data
mov     ds,ax    
mov    AL,buf
cmp    al,0
JG    L1
JZ    L2
MOV    BL,-1
JMP    C3
L1:MOV    BL,1JMP    L3
L2:MOV    BL,0
L3:MOV    RESULT,BLMOV    AH,4CHINT    21H
CODE    ENAS    END    STANT

自内存0500H单元开始,保存有10个无符号字节类型的数据,分别为45H, 89H, 11H, 26H, 8AH、 9FH, 78H、 OAAH, 18H、 ЗEH请编写程序,求这10个数之和。

要求:

        (1)用8位二进制数运算方式进行计算。

        (2)结果用两个字节表示。

        (3)把结果存放到050AH和050BH单元,且高字节放在050BH单元。

在DATA1单元开始存放10个无符号字节数据,编程求10个中偶数的个数,将结果存于DATA2单元。

DATA SEGMENTDATA1 DB 0,1,2,3,4,5,6,7,8,9   ;定义10个无符号数DATA2 DB ?
DATA    ENDSCODE    SEGMENTASSUME    CS:CODE,DS:DATASTART:MOV    AX,DATAMOV    DS,AXLEA    BX,DATA1MOV    AL,[BX]TEST    AL,01HJZ    L1

考点5        子程序的相关知

        顺序:(X^2+Y^2)/子
                        {

                字符串                

}

分之{

                        比较  小转大

                        分段函数

}

循环{

        从1加到100

        10个数求和

        10个中统计    偶数   正/负        0的个数

}

X>=90

90>x>=80

80>x>=70

70>x>=60

60>x>=50

例:写出下列程序的功能,并画出程序框图
Datas Segmentn DW ?sum DW ?
Datas Ends
Stack Segment PARA Stack 'stack'DW 200 DUP(?)
Stack Ends
Codes Segment
Main Proc FARAssume CS: Codes, DS: Datas, SS: StackStart:PUSH DS                                ;AX=0;BX=0MOV AX,0PUSH AXMOV AX,DatasMOV DS,AX                                BX+1----xMOV AX,0MOV BX,0
LOOPT: INC BX                                    AX=AX+BXADD AX,BXCMP AX,1000                            AX=<1000JBE LOOPTMOV n,BX                               ;否  给NMOV sum,AX                            sum——axRET        
Main Endp                                     end
Codes EndsEnd Start————————————————————————
循环直到大于1000时停止循环

考点6        汇编A程序上机过程     

.asm

.obj

.exe           


        总结   

标号和变量的命名和用法

伪指令的类型和功能

汇编语言程序编程

汇编程序上机调试过程

                                                        

这篇关于第5/6 汇编伪指令及程序设计(Pro)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/270086

相关文章

笔记整理—内核!启动!—kernel部分(2)从汇编阶段到start_kernel

kernel起始与ENTRY(stext),和uboot一样,都是从汇编阶段开始的,因为对于kernel而言,还没进行栈的维护,所以无法使用c语言。_HEAD定义了后面代码属于段名为.head .text的段。         内核起始部分代码被解压代码调用,前面关于uboot的文章中有提到过(eg:zImage)。uboot启动是无条件的,只要代码的位置对,上电就工作,kern

C语言程序设计(数据类型、运算符与表达式)

一、C的数据类型 C语言提供的数据类型: 二、常量和变量 2.1常量和符号常量 在程序运行过程中,其值不能被改变的量称为常量。 常量区分为不同的类型: 程序中用#define(预处理器指令)命令行定义变量将代表常量,用一个标识符代表一个常量,称为符合常量。 2.2变量 变量代表内存中具有特定属性的一个存储单元,用来存放数据,在程序运行期间,这些值是可以 改变的。 变

C语言程序设计(选择结构程序设计)

一、关系运算符和关系表达式 1.1关系运算符及其优先次序 ①<(小于) ②<=(小于或等于) ③>(大于) ④>=(大于或等于 ) ⑤==(等于) ⑥!=(不等于) 说明: 前4个优先级相同,后2个优先级相同,关系运算符的优先级低于算术运算符,关系运算符的优先级高于赋值运算符 1.2关系表达式 用关系运算符将两个表达式(可以是算术表达式或关系表达式,逻辑表达式,赋值表达式,字符

汇编:嵌入式软件架构学习资源

成为嵌入式软件架构设计师需要掌握多方面的知识,包括嵌入式系统、实时操作系统、硬件接口、软件设计模式等。 以下是一些推荐的博客和网站,可以帮助你深入学习嵌入式软件架构设计: ### 1. **Embedded.com**    - **网址**: [Embedded.com](https://www.embedded.com/)    - **简介**: 这是一个专注于嵌入式系统设计的专业网

VMware Fusion Pro 13 Mac版虚拟机 安装Win11系统教程

Mac分享吧 文章目录 Win11安装完成,软件打开效果一、VMware安装Windows11虚拟机1️⃣:准备镜像2️⃣:创建虚拟机3️⃣:虚拟机设置4️⃣:安装虚拟机5️⃣:解决连不上网问题 安装完成!!! Win11安装完成,软件打开效果 一、VMware安装Windows11虚拟机 首先确保自己的mac开启了网络共享。不然虚拟机连不上👀的 1️⃣:准备镜像

智能工厂程序设计 之1 智能工厂都本俱的方面(Facet,Aspect和Respect)即智能依赖的基底Substrate 之1

Q1、昨天分别给出了三个智能工厂的 “面face”(里面inter-face,外面outer-face和表面surface) 以及每个“面face” 各自使用的“方”(StringProcessor,CaseFilter和ModeAdapter)  。今天我们将继续说说三个智能工厂的“方面” 。在展开之前先看一下三个单词:面向facing,取向oriented,朝向toword。理解这三个词 和

ArcGIS Pro 克隆clone python环境报错问题处理方法

ArcGIS Pro 克隆clone python环境报错问题处理方法 (一)安装arcpro和深度学习安装包 首先安装arcgis pro桌面版和深度学习安装包后 然后克隆默认 Python 环境 arcgispro-py3 接下来,安装以下 Python 软件包:Tensorflow、fast.ai、Keras、Pytorch、Scikit-image、Pillow 和 Libtiff。 切

C语言程序设计 笔记代码梳理 重制版

前言 本篇以笔记为主的C语言详解,全篇一共十章内容,会持续更新基础内容,争取做到更详细。多一句没有,少一句不行!  形而上学者谓之道,形而下学者谓之器 形而上学者谓之道,形而下学者谓之器 第1章 C语言的流程 1.C程序经历的六个阶段 编辑(Edit)预处理(Preprocess)编译(Compile)汇编(Assemble)链接(Link)执行(Execute)  2.

ACM东北地区程序设计大赛

不得不说随着参赛级别的提高,题目真的是越来越难啊,不过队长真是给力啊,在我们三个共同努力之下拿下了地区赛三等奖,哈哈我们可是大一唯一一只获奖队,终于在这次比赛打败了田大神。。。大神是失手了,俺和他差距还是挺大的。。。队友陈彤马上要去服兵役了,他说这是我们送给他最好的离别礼物,希望那家伙在部队好好干,以后谁干揍我!!!东北地区赛结束后,今年已经估计没机会参加亚洲区比赛了,赶紧补高数和线数啊!!别挂了

GDB 查看汇编

查看汇编 x disassemble