东北师范大学微机原理课后习题及期末复习(简略)

微机原理复习

注意:答案仅供参考。
在Typora上格式很舒服,一上传到博客园上就很怪。

第一章:微机系统的构成

知识点(pdf)

  1. 传统定义(简略)

  2. 微处理器、微型计算机和微型计算机系统(了解定义即可)

  3. 微机系统的组成【注意总线:双向、单向】

  1. 计算机发展的四个阶段:电子管、晶体管、中小规模集成电路、大规模集成电路

  2. 微处理器发展(4【4004】、8【8080】、16【8086】、32【Pentium】、64位【Itanium、Core】微机)

  3. 微型计算机分类:

    1. 单片机
    2. 单板机
    3. 个人计算机
  4. 五大部件功能及组成的改变(记一下英文)

  5. 微处理器典型结构

  6. 由三类总线构成的微机系统

    1. **片总线(Chip Bus, C-Bus) **:又称元件级总线
    2. 内总线(Internal Bus, I-Bus):微型计算机系统中各插件之间的信息传输通路
    3. 外总线(External Bus, E-Bus):又称通信总线
  7. 微型计算机的各个部件之间通过三组不同的总线相连

    • 数据总线(Data Bus --DB)--双向

    • 地址总线(Address Bus---AB)--单向

    • 控制总线(Control Bus—CB)--双向

  8. 相关术语:

    1. 字长:指微处理器一次可以直接处理的二进制数码的位数
    2. 主频:也称为时钟频率,用来表示微处理器的运行速度,主频越高表明微处理器运行越快,主频的单位是MHz或GHz。主频=外部总线频率$*$倍频系数
    3. MIPS:每秒钟能执行多少百万条指令
    4. 南桥芯片和北桥芯片(CPU与外设)
    5. BIOS芯片、CMOS芯片
  9. 芯片组的功能

    1. 通过VLSI技术,将主板上众多的接口电路和支持电路按不同功能分别集成到一块或几块集成芯片之中,这几片VLSI芯片的组合称为“控制芯片组”,简称“芯片组”

习题(雨课堂)

1.主观题 (20分)

基于冯·诺依曼体系结构下,微型计算机系统的组成包括哪些内容?

2.主观题 (20分)

根据微处理器的典型结构,简述微处理器的基本组成包括哪些部件?

3.主观题 (20分)

根据作用范围和传输内容,简述微机系统有哪几类总线?

4.主观题 (20分)

请给出字长、主频、集成度、向上兼容等术语的解释。

5.主观题 (20分)

南桥芯片和北桥芯片各自用于什么用途?它们一般位于主板的什么位置?

复习题

没有错误

第二章:8086微处理器的结构

知识点

2.1.8086概述

  • 8086 微处理器被设计为两个独立的功能部件【该部分要了解微处理器执行步骤】
    • 总线接口部件BIU
    • 执行部件EU(指令执行与译码)
  • 地址总线20位(00000H~FFFFFH)直接寻址:2^20=1M字节单元,16位数据与地址总线复用【访存最少一次(取指)】
  • 8086EU与BIU构成了类似流水线的功能,取值执行重叠
  • BIU组成
    • 4个16位的段寄存器(CS、DS、ES、SS)存储段的首地址
    • 1个16位的指令指针寄存器IP(code部分偏移量)
    • 逻辑地址由段基址和偏移地址组成,段式地址管理:1M内存分为最大64K的若干段(16位寄存器寻址)
    • 1个地址加法器:用于产生20位物理地址(物理地址(20位)= 段基址(16位)×16+ 偏移地址(16位) )
  • EU组成
    • 数据寄存器(16位/8位):AX,BX,CX,DX
    • 基址指针寄存器BP(16位)
    • 堆栈指针寄存器SP(16位)
    • 源变址寄存器SI(16位):DS:SI
    • 目的变址寄存器DI(16位):ES:DI
    • 标志寄存器FR(又称PSW)
  • 8086【指令队列6字节,16位DB】与8088【指令队列4字节,8位DB,准16位】区别(了解即可)

2.2.8086编程结构和存储结构(重点)

  • 隐含用法(估计不考)

  • 联用

    • SP,BP与SS联用→确定堆栈段中某一存储器单元的地址
    • SI,DI与DS联用→确定数据段中某一存储器单元的地址
    • DF为1,SI、DI减量,由高地址向低地址处理;DF为0,SI、DI增量,由低地址向高地址处理
  • 标志寄存器

    • 6位状态,3位控制
  • 每个存储单元有唯一的物理地址,但它却可由不同的“段

    基址”和“偏移量”组成。 例如:

    1200H:0345H→12345H

    1100H:1345H→12345H

  • 逻辑地址来源

    • CS+IP取指
    • SS+SP堆栈
    • DS+16位偏移(三种情况):存储器

8086引脚功能

公共引脚(#代表低电平有效)
  1. AD15~AD0:地址(单向)/数据复用,双向
  2. A19/S6~A16/S3:地址/状态复用总线
    1. T1,输出地址高4位(访问存储器时使用,组成20位地址信号,访问其他则为0000)
    2. 在T2~T4时,表示状态信号。S6=0,表示当前8086与总线相连S5标志中断允许IF的状态,S4和S3组合指示当前使用的段寄存器(00,01,10,11分别指ES,SS,CS或者未使用任何段寄存器,DS)
    3. DMA方式时,这些线浮空(相当于断开)
  3. NMI (Non-Maskable Interrupt)
    1. 不可屏蔽中断请求信号。不受IF标志的影响。
    2. 由外部输入,边沿触发,正跳沿有效。
  4. INTR:可屏蔽中断请求
    1. 中断请求信号,由外部输入,电平触发,高电平有效。
    2. INTR有效时,表示外部设备向CPU发出中断请求【外部设备-控制器-CPU】。
  5. BHE#/S7:高8位总线允许(Bus High Enable)
    1. T1:输出信号,指示高8位数据总线D15~D8上的数据是否有效
    2. 如果想从奇地址读/写一个字的话,分两个总线周期实现。
    3. 其他T2~T4(了解)
  6. RD#、READY(了解)
  7. RESET:(保持4个时钟周期)复位后,从FFFF0H处取指,同时初始化各寄存器
  8. TEST#:当CPU执行WAIT指令时,每隔5个时钟周期对TEST进行一次测试。 WAIT指令是用来使处理器与外部硬件同步。例如,与8087同步。
  9. MN/MX#:接Vcc,最小方式;接GND,最大方式
最小方式(8086提供全部控制信号)
  1. INTA#(24):Interrupt Acknowledge,输出中断响应信号。向外部输出,低电平有效,表示CPU响应了外部发来的INTR信号。
  2. ALE(25):Address Latch Enable,输出,地址锁存使能信号
  3. DEN#(26):Data Enable,输出,表示8086准备发送或接收一个数据
  4. DT/R#(27):Data Transmit(1)/Receive(0),输出,数据驱动器数据流向控制信号,输出,三态
  5. M/IO#(28):Memory/Input & Output,三态输出。存储器或I/O端口访问信号
  6. WR#(29):写命令。(在最小方式中,信号M/IO#、 WR#、RD #组合起来决定了系统中数据传送方式)【17:00例题可以听一听 CPU不占用总线的情况】
  7. HOLD、 HLDA:总线请求、总线响应
最大方式(8288提供总线控制信号)

多处理系统

复习题和习题中没有出现,这里就略过了。感兴趣可以自己看。

8086微处理器的基本时序(重点)

时钟周期
  1. 时钟周期:CPU的时间基准,由计算机的主频决定。

    1. 例如,8086主频为5MHz,则1个时钟周期为主频倒数200ns
  2. 指令周期(Instruction Cycle,fetch-decode-execute cycle)

    1. 每条指令的执行由取指令、译码和执行等操作组成,执行一条指令所需要的时间称为指令周期
  3. 总线周期(Bus Cycle)(机器周期):BIU与存储器或IO端口进行一次读操作或写操作所需的时间【由若干(一般4个)时钟周期组成

    1. 如果内存或IO接口速度较慢,来不及响应,则需在T3之后插入1个或几个Tw状态。
    2. 空闲周期:只有BIU与内存或I/O端口交换数据,以及填充指令队列时,BIU才执行总线周期。除此之外,既不需要填充指令队列,EU也没有向BIU发出总线周期请求时,系统总线就处于空闲状态,进入空闲周期,由一个或几个TI状态组成。 CPU仍然驱动前一个总线周期的状态信息。
  4. 总线操作与复位(时序图)

    1. 复位(掌握)
    2. 最小模式总线读写(重点)
      1. 地址锁存器,数据驱动器【???】
      2. 不同之处
        • CPU不是输出RD#信号,而是输出WR#信
        • DT/R#整个总线周期为高电平,表示本总线周期为写周期,在拥有数据总线收发器的系统中,用来控制数据传输方向。
        • AD15-AD0在T2到T4状态输出数据,输出地址与输出数据为同一方向,无需像读周期那样要高阻态做缓冲,即T2状态无高阻态。
    3. 最大模式总线读写(了解)
    4. 总线保持(了解)
    5. 中断响应(掌握)
      1. 两包含两个总线周期

习题

1.主观题 (14分)

8086处理器内部有14个16bit寄存器,请分别写出这些寄存器的中、英文名称。

我的答案

累加器:AX

基址寄存器:BX

计数寄存器:CX

数据寄存器:DX

堆栈指针寄存器:SP

基址指针寄存器:BP

源变址寄存器:SI

目的变址寄存器:DI

(代码)程序段:CS

数据段:DS

堆栈段:SS

附加段:ES

指令指针:IP

标志寄存器:FR

2.主观题 (10分)

在8086的寄存器中,指针寄存器与段寄存器如何联用?

  1. 堆栈指针,基址指针寄存器与堆栈段寄存器联用→确定堆栈段中某一存储器单元的地址,SP用来表示栈顶的偏移地址,BP可作为堆栈区中的一个基地址以便访问堆栈中的其他信息.
  2. SI,DI与DS联用→确定数据段中某一存储器单元的地址,SI和DI有自动增量和自动减量的功能.在串处理指令中,SI和DI作为隐含的源变址和目的变址寄存器,SI和DS联用,DI和ES联用,分别达到在数据段和附加段中寻址的目的.
  3. DF为1,SI、DI减量,由高地址向低地址处理;DF为0,SI、DI增量,由低地址向高地址处理.

3.主观题 (21分)

什么是逻辑地址?什么是物理地址?分别描述取指令、出/入操作、通用数据读写时物理地址的计算公式是什么?

逻辑地址:由"段基址"和"偏移量"构成,是程序产生的与段相关的偏移地址.

物理地址:CPU访问存储器时,在地址总线上实际送出的地址.物理地址(20位)段基值=(16位)+偏移量

取指令:选择CS 值作为段基值,再加上由IP提供的偏移量形成物理地址.

出入栈操作:选择SS 值作为段基值,再加上由SP 提供的偏移量形成物理地址.

通用数据读写:选择DS 值作为段基值,再加上16位偏移量形成物理地址,这16位偏移量可来自:

1.指令中提供的直接地址

2.某一个16位地址寄存器(BX 、DI 或SI)的值

3.指令中的位移量加上16位地址寄存器(BX 、BP 、DI 或SI)的值

4.主观题 (10分)

简述8086工作的最小方式与最大方式。

  1. 最小模式是指系统中只有一个8086/8088处理器,所有的总线控制信号都由8086/8088CPU产生。所用的总线控制部件最少。

  2. 最大模式一般用在多处理器系统,在单处理器系统中有时也用最大方式,此时用8288来增加 总线的驱动能力.

    1. 协处理器方式:8086+8288(总线控制器)+8087(数值运算协处理器) +8089 (I/O协处理器)[由一个8086独占]
    2. 多处理器方式:多个8086 (+8087+8089) +8288(总线控制器)+ 8289(总线裁决器)

5.主观题 (15分)

说明指令周期,总线周期,时钟周期三者的关系。

时钟周期:与计算机本身硬件配置有关,是CPU的时间基准,由主频决定.

指令周期:每条指令的执行由取指令、译码和执行等操作 组成,执行一条指令所需要的时间称为指令周期.

总线周期:BIU与存储器或IO端口进行一次读操作或写操作所需的时间

其关系是: 时钟周期是基本时间单位,一个总线周期由多个时钟周期构成(与CPU有关?),一个指令周期由多个总线周期组成

6.主观题 (30分)

Intel 8086的一个基本的总线周期包含几个时钟周期?简述最小方式下存储器读操作在每一个时钟周期分别完成什么操作?什么情况下需要插入等待状态?

  1. 包含4个时钟周期

  2. T1/T2/T3/T4

    1. 在T1状态,CPU往多路任用总线上发出地址信息,以指出要寻址的存储单元或外设端口的地址
    2. 在T2状态,总线的最高4位(A19-A16)输出本总线周期状态信息, 这些状态信息用来表示中断允许状态、当前正在使用的段寄存器名
    3. 在T3状态,多路总线的高位继续提供状态信息,而多路总线的低16位(8088 则为低8位)上出现CPU从存储器或端口读入的数据
    4. 在有些情况下,外设或存储器速度较慢,不能及时配合CPU传送数据。这时,外设或存储器会用"Ready"信号在T3状态启动前向CPU发一个"数据未准备好"信号,于是CPU会在T3之后插入1个或多个附加的时钟周期Tw

复习题1

  1. 用一片EPROM芯片构成系统内存,其地址范围为F0000H-F0FFFH,无地址重叠,该内存的存储容量为(2KB)。
  2. 注意当要填写二进制数时,记末尾得加上“B”
  3. 8086CPU输入/输出指令可寻址外设端口的数量最大可达(256)。
  4. 8086CPU从寄地址读写两个字节(一个字)时,需要(2)个总线周期。
  5. 在8086微处理中,用来存放要取出的指令或操作数地址的部件是(程序计数器PC)
  6. 在8088CPU中,为了减少CPU的等待取指所需的时间,故设置了(指令缓冲队列)
  7. 中断响应周期包括2个总线周期,第1个总线周期的INTA负脉冲用来( 通知中断源CPU准备响应中断),第2个总线周期INTA负脉冲,外设应把( 中断类型号),送到( 数据总线的低8位上)。

复习题2(感觉有些题跟讲的没关系)

  1. 一个有16个字的数据区,它的起始地址为70A0H:9DF6H,它的最后一个字的存储单元的物理地址是(7A814H)。
  2. 80386之后的32位CPU可提供虚拟存储器空间大小为(64TB)。【???】
  3. 根据主丰与外存交换信息的单位不同,以下(组相联管理)不属于虚拟存储器管理机制。【蒙对了,但还是???】
  4. 以下寄存器不属于Pentium II寄存器的是(EDS)【学过吗???】
  5. 在8086系统中,为了能正确返回被中断程序,则当CPU响应外部中断请求并转向中断处理程序前,应将(断点)的地址 圧入栈。

第三章:8086汇编语言设计

知识点

8086指令系统

  1. 指令的寻址方式
  • 指令格式 :操作码 (目标操作数)( 源操作数)
  • 指令的寻址方式( Addressing Mode)是指在指令中操作数的表示方式。【指令地址:(IP)=(IP)+LEN(指令)】
    • 立即寻址MOV AX,4CABH
      • 如果十六进制数以字母A ~ F 打头,则必须在前面加上一个“0” ,这是汇编程序的要求。
    • 寄存器寻址MOV DS ,AX或INC AX ;AX + 1 →AX
      • 两个操作数类型要一致
    • 存储器寻址EA=(BX/BP)+(SI/DI)+DISP (8、16位)
      • 直接寻址EA=D或LABEL,直接给出操作数的偏移地址INC ADDR指令中存储器操作数的地址用符号地址(变量,Variable)ADDR 表示【!!!这里提到了要考:data DB 500是否正确,我认为不可,一个字节没法表示500】
      • 寄存器间接寻址EA=[BX]或[DI]或[SI]【默认段在DS,所以不能使用BP、SP(SS段)】(!!!需要搞清楚用什么寄存器访问什么数据段)
      • 基址寻址EA=BX(或BP)+D
      • 变址寻址EA=SI(或DI)+D
      • 基址变址寻址EA=BX(BP)+SI(DI)+D
    • 串操作寻址
    • 外设寻址
    • 程序转移操作寻址
      • 顺序执行:下一条指令的偏移地址总是由指令指针IP 自动递增而得
      • 段内转移:需要给出即将转移去执行的那条指令的偏移地址,取代IP中的原有内容(需计算保存原地址,方便跳回)
        • 段内直接转移:EA=IP + D【重点】
        • 段内间接转移:EA=BX(BP/SI/DI)
      • 段间转移:即将转移去执行的指令与原来执行的指令不在同一段中,需用新的代码段的段基值去取代CS 中的原有内容,此时,操作数作为转移地址使用,分别送到IP和CS 。
  • 根据寻址方式计算而得的地址只是有效地址EA———段内偏移地址,这一地址还需与所在段的段基值组合后才能形成20 位的物理地址
  • 课堂问题:
    • 立即寻址读16位地址,分几个总线周期?与哪个引脚有关?【BHE???】【BHE 、AD0:0,0从偶地址读一个字,一个总线周期即可】
    • 逻辑地址与物理地址的区别
  • 指令长度与寻址方式有关
    • 无操作数:1字节
    • 操作数只涉及寄存器:2字节
    • 涉及内存地址:3字节
    • 涉及立即数:寄存器类型(8位:1;16位:2)+1
    • 段内短跳转(8位):2,段内近跳转(16位):3,段间跳转:5
  • 指令格式
    • 2974866-20220910162037615-141511854
    • D
      • 1——目标操作数为寄存器
      • 0——目标操作数为内存
    • MOD
      • 00——内存寻址,无偏移
      • 01——内存寻址,disp8
      • 10——内存寻址,disp16
      • 11——寄存器寻址,无偏移

8086指令解析

  1. 数据传输指令注意【疑问 类似 MOV DS [SI+2],2代表的是2字节吗???应该是,像栈区的递增都是+2】

    1. 源和目的操作数不允许同时为存储器操作数;MOV memory1,memory2
    2. 源和目的操作数数据类型必须一致;同时为8位,或同时为16位
    3. 源和目的操作数不允许同时为段寄存器;MOV DS, SS
    4. 目的操作数不允许为CS和立即数;目的操作数一般用于存放结果,只有使用寄存器或存储单元。
    5. 当源操作数为立即数时,目的操作数不允许为段寄存器;MOV DS, 0FAA4H ?如何处理
    6. 传送操作不影响标志位。
  2. 【注意栈区地址先变化后写或读】

    1. XLATB;AL=DS:[BX+unsigned AL]
    2. LDS Reg data;Reg=first word DS=second word
  3. 算数运算指令(加减乘除)

    (后两个可以略过,没有讲)

需要把标志寄存器中值意义弄明白,补码记得+1

乘法格式:MUL r/m (B/W)

  • 当r/m为8位时,AX=AL * r/m
  • 当r/m为16位时, (DX,AX)=AX* r/m(DX, AX表示以DX和AX构成的一个32位寄存器)

除法格式:DIV r/m (B/W)

  • 当r/m为8位时,AL=AX/( r/m ) ;b商 AH=AX/( r/m ) ;余数
  • 当r/m为l6位时,AX=AX/(r/m) ;w商 当r/m为l6位时,DX=AX/(r/m) ;余数
  • MOV AL,2[SI] ;其中2的意义是在SI基础上偏移2
  1. 位处理指令

【考试:取出指定位的数(寄存器中位数从0开始) 】


都是记背内容,这里就只放图了。教材上关于移位有很好的图示,可以看看。

【SHL BX ,03h ;逻辑左移3位,在机器中分成了三次逻辑左移1位】

  1. 串操作指令

内存块拷贝

  • REP用于
    • MOVS/MOVSB/MOVSW
    • STOS/STOSB/STOSW
  • REPZ/REPE/REPNZ/REPNE用于
    • CMPS/CMPSB/CMPSW
    • SCAS/SCASB/SCASW

重复次数都存在CX中

  1. 21号中断(读取键盘输入并显示)
org 100h

mov ah ,01h
int 21h

ret
  1. 21H0209号功能实践【什么鬼】

输出 I love freedom【不能直接输出类似10的字符,直接给10还会经过ASCII转码】

org 100h
mov dx,offset strl
;lea dx,strl
mov ah,09h
int 21h

ret
; define the string 
strl DB 'I love freedom$'
end
  1. 跳转指令(JMP 不返回)



  • JMP 标号(一般是编程者给的)
  • JMP BX ; NEAR,功能为: IP BX
  • JMP [BX]
    • [BX] 必须写明:是WORD PTR [BX],还是 DWORD PTR [BX]
    • 若为WORD PTR [BX],则为段内跳转,功能是用[BX]W送IP;
    • 若为DWORD PTR [BX],则为段间跳转,功能是用[BX]DW送CS:IP

  1. 从1加到100代码实现:
INCLUDE 'emu8086.inc'
ORG 100h
MOV AX,0
MOV CX,100

KK:
    ADD AX,CX
    LOOP KK			;CX不为0
    MOV BX,AX
    CALL output 

ret

output PROC
    PUSH AX
    PUSH CX
    PUSH DX
    
    
    MOV DX,0
    MOV AX,BX
    MOV CX,10
    MOV BX,0
    
divagain:
    CMP AX,0
    JE divover
    INC BX
    DIV CX
    PUSH DX
    MOV DX,0
    JMP divagain
    
divover:
    CMP BX,0
    JE outputover
    POP DX
    
    ADD DL,48
    MOV AL,DL
    MOV AH,2
    INT 21h
    
    DEC BX
    JMP divover
    
outputover:
    POP DX
    POP CX
    POP AX
    RET    
output ENDP

END

[再复习一下之前的标志位内容]

习题(没开放,难受)

第四章:8086汇编程序基本语法【重点】

知识点

  • 汇编语言编写程序一般为:

    • 引导程序(完成初始化)
    • 驱动程序
    • 病毒程序
    • 木马程序
  • 理解例6-1:变量区/栈区/写指令指令区

    • 段由Segment开始,end结束
    • 汇编语言程序的语句有两类:指令性语句/指示性语句【可以成为很好的考察点,判断是否为XX语句】
      • 指令性语句是主要由指令构成的语句格式:
        [标号:] 操作码[操作数] [ ;注释]
      • 指示性语句是主要由命令(也称伪指令)构成的语句用来指示汇编程序进行汇编操作。格式:
        [名字/变量] 命令 参数 [ ;注释]
  • 数据定义:

    • data SEGMENT
      变量名 长度 数据(字符串结尾加"$")
      end
      
    • DB——定义字节数据(8 位)
      DW——定义字数据(16 位)
      DD——定义双字数据(32 位)
      DQ——定义8字节数据(64 位)
      DT——定义10字节数据(80 位)

    • 通过y1访问另一组数据(可以,连续存储)

  • 伪指令

    • 常量

      • 数字常量:可以是二进制数、八进制数、十进制数或十六进制数表示
      • 字符常量:是用单引号‘ ’括起来的ASCII字符,其值是该字符的ASCII代码值
      • 符号常量:是用符号定义的常量。例如,采用符号定义语句 PORTA EQU 80H,则指令 MOV AL,PORTA 与指令 MOV AL,80H 等价
    • 标识符

      • 组成标识符的字符有:
        英文大写字母:A~Z;
        英文小写字母: a-z;
        数字0~9;
        字符?、@、_ 、$;
      • 字符长度不超过3l个;
      • 首字符不能是数字;
      • ? 不能单独作为一个标识符;
      • 不能把保留字用作标识符,保留字包括助记符、寄存器名等。
    • 表达式:表达式由操作数和运算符组成

    • x1 DB 11,22,33.....
      ...
      MOV CX,WORD PTR x1	;CX=16(CH)0B(CL)H
      ;必须加对齐方式,不然会报错
      

指示性语句

  • NAME 命令格式: NAME 名字
    给程序模块命名

  • TITLE 命令格式: TITLE 名字
    名字作为每页标题打印出来,标题名字符不大于60个

  • END命令格式: END [ 标号 ]
    主模块结束必须写上标号,标号是程序中第一句指令性语句的标号。

  • SEGMENT / ENDS命令,定义一个段。格式
    段名 SEGMENT [参数]
    …….
    段名 ENDS

  • BYTE该段可从任何地址开始,即段基址=X....XB,其中X表示任意值,即1/0。
    WORD该段必须从字的边界开始,即段基址= X...X 0B。
    PARA该段必须从小节的边界开始,即段基址= X...X,0000B。
    PAGE该段必须从页的边界开始,即段基值= X...X,0000,0000B。

  • 段定义语句ASSUME:用于指示下述程序中段寄存器同指定段名的对应关系。格式:
    ASSUME CS:段名1 , DS: 段名2 , SS: 段名3 , ES:段名4【期末考试必定有程序编写题,分高】

  • 组合类型,没怎么讲

  • 过程定义语句:过程即子程序,是程序的一部分,程序中用CALL指令调用过程,过程结束用RET指令返回程序。格式:
    过程名 PROC 类型
    ……
    过程名 ENDP

  • ?:一个问号保留一个存储单位(字),以备程序执行过程中存入结果数据;
    范例:ARY DW ?,?,?(ppt有错)

  • DUP为复制符,格式
    变量名 对齐方式 复制次数 DUP (数据)
    范例:ARY DB 4 DUP (43H)

  • 【典型考试题】
    DATA1  SEGMENT  AT 2000H
                 ORG   3000H
    ARY1    DB  12H , 34H , 56H , 78H
    ARY2    DW  1234H, 5678H
    ARY3    DB  ‘A’,’B’,’C’,’D’,‘ABCD’
    ARY4    DW  ‘AB’
    ARY5    DD ‘AB’
    ARY6    DW  ARY2
    ARY7    DD   ARY2	;【思考为什么有值,而上一行执行结果没有,“1500”怎么来的???与偏移有关,ARY2=0015】
    试画出上述定义中,数据的存储空间分布            
    
    • 注意小端序:低位在低位
  • 符号定义语句

    • EQU 命令,功能:等值命令
      格式:名字/变量 EQU exp
      范例:CONT1 EQU 30
      说明:不可重复赋值
    • = 命令,功能:等号命令
      格式:名字 = exp
      范例:CONT1=30
      说明:可重复赋值,如:CONT1=CONT1+40
    • PURGE命令,功能:用来撤消已定义的符号常量
      格式:PUREG 名字
      范例:PUREG CONT1
  • 运算符

    • 分析运算符: ( Analytic operator ) 用于把变量的三个属性分别取出来作为操作数。【要掌握】

      • SEG 变量名 ——取出变量的段基值
        OFFSET 变量名 ——取出变量的偏移地址
        TYPE 变量名 ——取出变量的类型值
      • LENGTH 变量名 ——表示变量所在数组的元素个数。注意:只有当数据用DUP定义时,才适用,否则恒为 1 。
      • SIZE 变量名 ——表示变量所在数组的字节数。
        注意: 同LENGTH,SIZE 变量 = LENGTH 变量 * TYPE 变量
    • MOV BX,offset ary1   ;=LEA BX,ARY1
      
    • 合成运算符PTR:用于临时改变变量或标号的类型属性,或用来指定内存操作数的类型。
      格式:类型 PTR exp

第五章:8086汇编程序设计

知识点

顺序结构

  • 程序 ( PROGRAM )是完成特定功能的一组指令的有序集合

  • 指令顺序执行,无分支、无转移、无循环。硬件支持是IP自动加1, 从内存取出一个指令字节,IP自动加1

  • 例题1:查表求平方值

DATA 	SEGMENT
TABLESQ	DB 	0,1,4,9,16,25,36,49
		DB	64,81,100,121,144,169,196,225
XX		DB 	X       ;X为0~15的正整数
YY		DB 	?		;XX和YY没法在仿真器上编译通过
DATA	ENDS
STACK	SEGMENT PARA STACK'STACK'
DB 50 DUP(?)
STACK 	ENDS
CODE	SEGMENT
        ASSUME   CS:CODE,DS:DATA,SS:STACK
BEGIN:  	MOV  AX,DATA	;DS不能直接寻址,要通过通用寄存器....【强调】
			MOV  DS,AX		;这两句是套路
			MOV  BX,OFFSET TABLESQ		;相同:LEA BX ,TABLESQ
			MOV  AH,0		;(注意:AX原本是有值的)
			MOV  AL,XX			;【x为9,3行后YY为多少???81】
			ADD  BX,AX
			MOV  AL,[BX]	
;这三行可以改成:MOV SI,XX   MOV AL,[BX]       ;[SI]/MOV AL,XX[BX]
			MOV  YY,AL
			MOV  AH,4CH
			INT  21H    	;4CH号功能调用结束
CODE		ENDS
			END BEGIN
MOV BX,OFFSET dat1
MOV AL,[BX+D]		;用于访问dat1后的任意值
MOV AL,dat1		;没有上述用法
点击查看代码
data 	SEGMENT
  dat1    DB 	0,1,4,9,16,25,36,49
  		DB	64,81,100,121,144,169,196,225
  ENDS
  STACK	SEGMENT 
  DW 128 DUP(0)
  ENDS
  CODE	SEGMENT
  start:
  			MOV AX,data
  			MOV DS,AX
  			MOV ES,AX
  			MOV  BX,OFFSET dat1
  			MOV  AL,[BX+11]
              ; wait for any key....    
              mov ah, 1
              int 21h
              mov ax, 4c00h ; exit to operating system.
              int 21h    
              ends
  end start
  • (注意:考试的时候大概率并不会考模拟器里的代码,最好记PPT里的代码)

  • 例题2:非压缩的BCD码转换为压缩的BCD码

      MOV  AX , DAT1           ;AX=0109
      MOV  CL , 4              ; CL=4
      SAL    AH , CL           ; AH=10H,算术左移
      ROL    AX , CL           ; AX=0091,循环左移
      ROL    AL , CL           ; AL=19H
    MOV   BYTE PTR DATA , AL	;因为这里只写入低四位,所以结果是DAT1:0119H
      DAT1  DW    0109H    
    
    • 声明字符串时一般用'DB';

分支结构

  • 具有判断和转移功能的程序。
    (1) 判断:运算结果的状态标志
    CF,PF,ZF,SF, OF; 【复习FR】
    (2) 转移:主要是条件转移指令Jcc ,cc为条件。

    ​ 单标志位判断……JC(carry),JZ(zero),JO(overflow),JP,JS,JAE(above,equal)等;
    ​ 多标志位判断……JA,JG,JGE(great,equal)等

  • 采用比较指令和转移指令实现分支

    CMP  d,s;d- s
    Jcc   标号		;CF:CS=C set 1;CC=C clear 0
    
  • 符号函数处理

    MOV  AL,XX
    CMP  AL,0
    JGE  BIGR
    MOV  AL,0FFH
    MOV  YY,AL				;X<0时,-1送入YY单元
    HLT
    BIGR:JE  EQUL
    
  • 【EQU 与“=”的不同,不允许重复赋值(常量)】

  • 数据块传送程序【注意框架要对,否则没分】

    DATA	SEGMENT
        STRG 	DB  1000 DUP (?)
        STG1	EQU  STRG+7
        STG2	EQU  STRG+25
        STRSE	EQU  50
    DATA 	ENDS
    STACK	SEGMENT  PARA  STACK  ‘STACK’
    	STARN	DB  100  DUP  (?)
    STACK	ENDS
    COSEG	SEGMENT
    	ASSUME  CS:COSEG, DS:DATA, ES:DATA,SS:STACK 
        MOV  AX,DATA
        MOV  DS,AX
        MOV  ES,AX		;套路
        MOV  CX,STRSE
        MOV  SI,OFFSET STG1
        MOV  DI,OFFSET STG2
        CLD					;clear DF(即DF=0)
        PUSH  SI
        ADD  SI,STRSE - 1
        CMP  SI,DI
        POP  SI
        JB  OK
        STD					;DF=1减量方式传送
        ADD  DI,STRSE - 1	      	;指向数据块底部
    	ADD  SI,STRSE - 1
    OK:	REP   MOVSB	       		;重复传送50个数据
        MOV   AH,4CH
        INT  21H      
    
  • 利用跳转表实现分支(主要问题是:表地址=表基地址+偏移量)【重点还是在各种方式的地址偏移寻址上】

    八分支,每个SBR首地址和偏移分别存放在跳转表的低地址和高地址中

    DATA	SEGMENT
    BASE	DW SBR0, SBR1, SBR2, SBR3
    	DW SBR4, SBR5, SBR6, SBR7
    BN		DB X  			;X为0~7之间的正整数
    DATA	ENDS
    STACK	SEGEMNT PARA STACK ‘STACK’
    		DB 100 DUP(?)
    STACK	ENDS
    COSEG	SEGMENT
            ASSUME CS:COSEG, DS:DATA, SS:STACK
            MOV AX,DATA
            MOV DS,AX
            MOV AL,BN
            MOV AH,0
            ADD AL,AL
            MOV BX,FOFSET BASE
            MOV AH,0
            ADD AL,AL
            MOV BX,FOFSET BASE
            ADD BX,AX
            MOV AX,[BX]
            JMP AX
            MOV AL,4CH
            INT 21H
    COSEG 	ENDS
    

    【课后:改代码,实现X=n,SBRn】

    • MOV AX ,[BX]
      JMP AX
      可以用JMP WORD PTR [BX] 替代

子程序

  • 调用与返回:
    主程序用CALL指令调用子程序
    子程序用RET指令返回主程序

  • 嵌套与递归

  • 参数传递一般有三种方法:

    • 用寄存器传递,适用于参数较少的情况;
    • 用参数表传递,适用于参数较多的情况,要求事先建立参数表,参数表一般建立在内存中;
    • 用堆栈传递,适用于参数多并且子程序有嵌套,递归调用的情况,主程序将参数压入堆栈,子程序中将参数从堆栈中弹出。
  • 求数组之和

    STACK	SEGMENT   PARA STACK
    	SPAE	DW   20 DUP(?)
    	TOP 	EQU    LENGTH SPAE
    STACK	ENDS
    DATA	SEGMENT
    	ARY1	DB    100 DUP(?)
    	SUM1	DW ?
    	ARY2	DB     150 DUP(?)
    	SUM2	DW     ?
    DATA	ENDS
    MAIN	    SEGMENT
    	ASSUME CS: MAIN, DS: DATA, SS: STACK
        MOV       AX,DATA
        MOV       DS,AX
        MOV       AX,SIZE ARY1
        PUSH     AX
        MOV       AX,OFFSET ARY1
        PUSH      AX
        CALL       SUM
        MOV  AX,SIZE ARY2
    	PUSH AX
    	MOV AX,OFFSET ARY2
        PUSH  AX
    	CALL  SUM
    	HLT
    MAIN	ENDS
    PROCE	SEGMENT
        ASSUME   CS:PROCE, DS:DATA,SS:STACK
    SUM   PROC   FAR
    	PUSH   AX
    	PUSH    BX
    	PUSH    CX
    	PUSH    BP
    	MOV     BP,SP
    	PUSHF
    	MOV     CX,  [BP+14]	                 
        MOV    BX,  [BP+12]
    	MOV     AX,0
    	ADN:	ADD     AL,[BX]
    	INC       BX
    	ADC     AH,0
    	LOOP    ADN
        MOV     [BX],AX
        POPF				
        POP     BP
        POP     CX
        POP     BX
        POP     AX
        MOV    AH,4CH
        INT       21H
    PROCE ENDS
    
    

    【任何地址包括两个部分:段基址:段偏移;所以出入栈是两倍的初始化栈长】

    【入栈:首先SP-2,写入栈区】

  • 求阶乘

    主程序名为MAIN,子程序有二个:

    • FACT为阶乘子程序,
    • MULT为字节数相乘子程序,实现CL×DL=AX。【估计考试时题目也是这么写的】

    阶乘子程序FACT

    • 入口参数:AL中存放n
    • 出口参数:DX中存放n!
    • 所用寄存器:CX
    FACT  	PROC
        	CMP   AL,0
        	JNE    IIA
        	MOV   DL,1
        	RET		
    IIA:  	PUSH   AX
    		DEC   AL
    		CALL   FACT
    X2: 	POP    CX
    		CALL   MULT
    X3:  	MOV    DX,AX
    		RET
    FACT	ENDP
    MULT	PROC
    		MOV AL,CL
    		MUL DL
    		RET
    MULT 	ENDP
    

    (这里既有递归也有嵌套,会是很好的考点)

    可运行代码
    
    data segment
        ; add your data here!
        pkey db "press any key...$"
    ends
    stack segment
        dw   128  dup(0)
    ends
    code segment
    start:
    ; set segment registers:
        mov ax, data
        mov ds, ax
        mov es, ax
        mov ax,3
        call FACT 
        mov ax,dx
        add ax,48
        mov dx,ax
        mov ah,2
        int 21h			;这5行实现输出数字
        mov dl,0ah
        int 21h
        mov dl,0dh
        int 21h			;这4行实现换行
        lea dx, pkey
        mov ah, 9
        int 21h        ; output string at ds:dx 
        ; wait for any key....    
        mov ah, 1
        int 21h 
        mov ax, 4c00h ; exit to operating system.
        int 21h    
    FACT  	PROC
        	CMP   AL,0
        	JNE    IIA
        	MOV   DL,1
        	RET		
    IIA:  	PUSH   AX
    		DEC   AL
    		CALL   FACT
    X2: 	POP    CX
    		CALL   MULT
    X3:  	MOV    DX,AX
    		RET
    FACT	ENDP
    MULT	PROC
    		MOV AL,CL
    		MUL DL
    		RET
    MULT 	ENDP   
    ends
    end start ; set entry point and stop the assembler.
        
    【课后:1加到100程序实现,估计会考,专门放成一个章节】
    可运行代码
    
    INCLUDE 'emu8086.inc'
    ORG 100h
    MOV AX,0
    MOV CX,100
    KK:
        ADD AX,CX
        LOOP KK
        MOV BX,AX
        CALL output 
    ret
    output PROC
        PUSH AX
        PUSH CX
        PUSH DX  
        MOV DX,0
        MOV AX,BX
        MOV CX,10
        MOV BX,0
    divagain:
        CMP AX,0
        JE divover
        INC BX
        DIV CX
        PUSH DX
        MOV DX,0
        JMP divagain
    divover:
        CMP BX,0
        JE outputover
        POP DX
        ADD DL,48
        MOV AL,DL
        MOV AH,2
        INT 21h
        outputover:
        POP DX
        POP CX
        POP AX
        RET    
    output ENDP
    END
    

程序例子

  • 由EA计算MA=SR*16+offset
  • 冒泡排序
DATA	SEGMENT
LTH	DB  100		  	;表长
TAB	DB  0FH12H14H,…	  ;数据表
TEM	DB  57H			  ;关键字
DATA	ENDS
CODE	SEGMENT
ASSUME  CS:CODE,DS:DATA,ES:DATA
START:	MOV  AX,DATA
        MOV  DSAX
        MOV  ESAX
        MOV  BX,OFFSET TAB    	;BX指向数据表
        MOV  AL,TEM	        	;取给定关键字
        MOV  CL,LTH	         	;取表长
        MOV  CH00H
LOP:	CMP  AL,[BX]		;在表中查找 
        JE    SOP			;找到,结束
        JL   INST	  	;未找到,若给定关键字小于表内元素,转INST,插入 
        INC    BX
        LOOP  LOP
        JMP   JUST	;给定关键字一直大于表内元素,将关键字放在表末 
INST:   MOV   DI,OFFSET TAB
        STD
        ADD   DI,LTH
        MOV   SIDI
        DEC    SI
        REP    MOVSB	;DS:SI->ES:DI;SI/DI递减
JUST:	MOV    [BX],AL
    	INC    LTH
SOP: 	MOV   AH4CH
        INT    21H
CODE	ENDS
END   START
  • 二分排序【考试:画存储的示意图】
DATA	SEGMENT 
BUFFER	DW 361790,-8,-80,-19
DW 125,-200050    
COUNT	EQU    $ - BUFFER 	;$指的是当前地址,计算BUFFER的size
DATA	ENDS
CODE	SEGMENT
ASSUME  CS:CODE,DS:DATA
START: 	MOV    AX,DATA
        MOV    DSAX
        MOV    DX2        ; 大循环变量I
CONT1: 	MOV    CX,COUNT			                		MOV    SICX
        DEC    SI
        DEC    SI 
        SHR    CX1		;小循环变量J
        MOV    BXCX		;交换标志
AGAIN:	MOV    AX,BUFFER[SI]
		CMP    AX,BUFFER[SI-2]
		JGE    NEXT  
        XCHG   AX,BUFFER[SI-2] 
        MOV    BUFFER[SI],AX
        MOV    BXCX		;置交换标志为J
NEXT:   DEC      SI
        DEC      SI
        DEC      CX 
        CMP    CXDX
        JGE     AGAIN
        CMP     BX,COUNT/2
        JE        DONE
        INC       DX
        JMP      CONT1
DONE:	MOV     AH4CH
		INT        21H
CODE	ENDS
END      START

DOS、BIOS调用

  • DOS调用方法是:
    (1)入口参数送指定的寄存器;
    (2)功能号(即子程序编号)送AH;
    (3)INT 21H指令
  • 01号功能调用——读取键盘字符并显示
    • 调用方法:MOV AH,01H
      INT 21H
  • 02号功能调用——显示字符
    • 调用方法: 要输出显示的字符送DL
      MOV AH, 02H
      INT 21H
  • 09号功能调用——字符串输出显示
    • 要输出显示的字符串的首地址送DS:DX;
      MOV AH ,09H
      INT 21H
  • 2BH号功能调用——日期设置(看一下就可以)
  • 0A号功能调用——字符串输入【必须掌握】
    • 调用方法:从键盘接受字符的输入缓冲区首地址送DS:DX

第五章:内存储器及接口

重点:掌握存储芯片与微处理器的连接方法,包括译码、片选等。

知识点

RAM

特点:能读能写,关机后信息消失。
分类:静态RAM
动态RAM

  • 读操作
    • 将需要读取的数据的地址送到存储器芯片。(AB)
    • 将读写控制引脚WE#置高,片选信号CS#和输出OE#置低。(CB)
    • 存储器芯片驱动数据输出线,将存取的数据输出(DB)
  • 写操作
    • 将需要写数据的地址送到存储器芯片。
    • 将要写入的数据送入存储器芯片
    • 将读写控制引脚WE#和片选信号CS#置低。输出信号OE#置高。

DRAM

微机系统中的内存条都采用DRAM芯片

DRAM中的信息会因电容器的漏电而消失, 一般信息只能保存2ms左右,为了保存DRAM中的信息,每隔1~2ms要对其进行刷新

  • 分类

    • 可编程ROM,PROM (Programmable ROM)写一次
    • 可擦除的PROM,EPROM (Erasable PROM)
    • 电可擦除PROM, E2PROM (Electrically Erasable PROM)
  • 工作原理:Intel2164

  • 由行地址选通信号,将先送入的8位行地址送到片内行地址锁存器,然后由列地址选通信号将后送入的8位列地址送到片内列地址锁存器。

  • 行地址连接地址总线A0A6,列地址连接地址总线A8A14,可同时选中4个存储体中的一个单元。

  • 地址线A7、A15经地址锁存器接1:4I/O门电路输入端,根据A7、A15不同的编码,选中4个存储体中的一个单元。

  • 刷新时,送入7位行地址,同时选中4个存储矩阵的同一行,即对4×128 = 512个存储单元进行刷新。每2ms需刷新一遍,2ms内需128个刷新周期。

    • 刷新时间:每2ms内刷新一遍
      每行刷新间隔为2ms/128=15.625μs。
      刷新间隔:15μs。

半导体存储器的结构框图

  • 重点:存储器中的数据组织

    • 存储字:计算机系统中,作为一个整体一次存放和取出内存储器的数据称为“存储字”。
    • 字节编址:一个存储地址对应一个8位存储单元。
      Intel x86:小尾端(小数端)
      =低地址,低字节
      Motorola 680X0:大尾端(大数端)
      =低地址,高字节
  • 半导体存储器的主要技术指标

    • 存储容量:存储器可以容纳的二进制信息量。以存储器中存储地址寄存器MAR的编址数与存储字位数的乘积表示;【要会计算】
    • 存储速度【了解即可】
      • 存取时间(Access Time) TA:从启动一次存储器操作(读或写),到完成该操作所经历的时间。
      • 存储周期( Memory Cycle) TMC:启动两次独立的存储器操作所需的最小时间间隔。
    • 可靠性
    • 性价比
  • SRAM 芯片:

    • HM6116:2K×8位
    • Intel 2114:1K×4位

半导体存储器接口的基本技术

  • 容量配置
    位扩展(数据总线)相同地址
    字扩展(地址总线)

【这部分看书比较好,听着挺枯燥的,抓不住重点】

  • 全译码:地址总线全部参与译码:每个存储单元有唯一的确定的地址。【掌握】

习题总结

知识点:

https://zhuanlan.zhihu.com/p/416718178

INC不影响CF

STC 进位置1

其一

有些比较偏的题就不放了

  1. 地址锁存器:ALE允许
  2. RESET信号后指令地址:
寄存器 复位后默认值
CS FFFFH
IP 0000H
DS,SS,ES 0000H
FLAGs 0000H
指令队列 清空
其他寄存器 0000H

CS和IP的内容,通过地址加法器得到FFFF0H,这就是复位后的第一条指令地址。

  1. 6字节指令队列
  2. 可屏蔽中断INTR,IF=1,中断响应
  3. BCD?会考吗,4位二进制
  4. READY信号在T2结束时就检测

考前答疑

仅供参考,每年情况可能不同。

题型:
选择 2分10
填空 2分
10
简答 3道题目 30分
应用 8086汇编程序 30分
老师的原话:
雨课堂有些测验题目要认真地看一看
教材的课后习题可以做一做

第一章
微机处理器,微机计算机和微机计算机系统 基本组成【需要清楚】
微处理器的发展 关注的是各个年代的处理机的字长 标准16位和准16位需要分辨一下
微型计算机的分类 什么是裸机,什么是单板机【需要清楚】
微处理器的典型架构 基本功能和总线连接方式【重点关注】
1.2.3 三类总线 片内总线和片外总线的区分 【需要清楚】
总线分为三大类 数据总线 地址总线 控制总线 【需要清楚】
三态是什么 【需要清楚】
基本的术语: 主频=外频*倍频系数 【需要清楚】
南桥芯片和北桥芯片 各自是干什么用的?【需要清楚】
BIOS芯片什么意思? 干什么的?
CMOS

第二章 8086微处理器结构
8086组成 BIU和EU, 示意图图的部件 【需要掌握】
执行部件的功能 【了解一下】
执行部件的组成 【请大家记住】
BIU的组成 【主要的东西记住】
8086和8088的区别 【记住/了解一下】
8086的寄存器 【必须记住 简答题】
通用寄存器的隐含用法 【了解一下,不用背】
有效地址 物理地址 偏移地址 【应用题 类似于课后的计算地址】
标志寄存器 各自的功能,不用记住位置 【必须记住】
8086存储器组织及物理地址形成
本次段都是连续的,不重叠的
Ppt30页那个表 【需要理解】
8086最小方式和最大方式 有何区别
公共引脚 【东西太多, 了解一下】
8086的主频
最大方式下的工作区别 【提了一下】
三种周期 区别 【清楚】
空闲周期和等待周期 这块讲了大概一分钟
最小方式读和写的时许图【时序图应该没有考核大家】
中断响应周期的两个总线周期在干什么【要清楚】
把ppt最后一页的作业作为参考 【把每一个问题全部搞清楚】

提问:需要注意8086最小最大方式的配置? 答:当然了,一是特点 二是配置有哪些?

第五章
全是重点

第六章
XLAT可以不用看
需要注意的是 操作数的位数,字节对齐还是字对齐
传送指令: XCHG 【略掌握】
算法运算指令:AAA DAA AAS DAS AAM AAD CBW CWD【略掌握】
位运算指令: 全部掌握
串操作指令: 全部都要求掌握 但不做重点要求【原话是:考没考察我也忘了】
转移指令: JC JNC 略微掌握
重复控制指令: 要求必须掌握
中断指令: 重点掌握INT IRET
跳转:
知道怎么去指示近跳转NEAR 远跳转FAR
关注一下近跳转和远跳转时段段寄存器
跳转指令的等价需要掌握
处理器控制指令:
【重点掌握】STC CLC STD CLD STI CLI NOP

第七章
把老师讲过的程序 弄清楚 【会考其中一个程序,不会原封不动,只会简单不会难】
会考核两个汇编程序,一个是汇编程序段【给一个C语言程序,写出等价的汇编程序段】,另外一个是完整的汇编程序
【子程序那块的数组求和要看懂】
7.6 能看懂最好,没有那么难。

第八章
主要考核:构造存储器系统
SRAM芯片多少位的 比如2K*8位 表示11条地址线 8位数据线。【会计算地址总线位数和数据总线位数】
用小容量芯片组成一个大存储芯片,需要多少个芯片?
8.2 位扩展和字扩展 46页重点
给定芯片信号和规格,决定是字扩展还是位扩展,决定数据总线和地址总线的宽度
【不会考怎么连以及译码器怎么搞,不会写出地址范围,只需要地址怎么算的】

试题分享

https://files.cnblogs.com/files/blogs/766658/微机原理模拟题.zip?t=1662799086
可以做着试试。部分答案有错,请小心使用。

posted @   海之龙  阅读(710)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示