2024-2025-1 山东大学《汇编语言》期末(回忆版)

2024-2025-1 山东大学《汇编语言》期末(回忆版)

计算机科学与技术学院:潘润宇老师

选择

  • 将机器语言目标文件组装成可执行文件的实用程序是?
  • 设 SP 初值为 1000H,执行指令 RETF 后,SP 为?
  • 8086 通用寄存器不包括哪个?
    • AX;BP;SP;IP
  • FLAGS 寄存器中,OF 位和 CF 位关系?
    • OF 置位则 CF 置位;CF 置位则 OF 置位;OF 和 CF 总是同时置位;无必然联系
  • 给了四条具体指令,找出错误的那条
  • 给了四条具体指令,问 8086 不支持哪一条
  • 已知(BX)= 2000H,(BP)= 1234H,问 MOV AX, [BX + BP + 2] 的目的操作数在哪?
    • 在 AX 寄存器中;在代码段偏移地址 3234H 处;在栈段偏移地址 3236H 处;编译不通过
  • 对小端字节序的计算机而言,设物理地址(10FF0H)= 10H,(10FF1H)= 20H,(10FF2H)= 30H,如从地址 10FF1H 中取出一个字的内容是?
  • 给一 C 语言片段,问适合什么寻址方式
  • 键盘上按键的扫描码和 ASCII 码?
    • 扫描码可以不存在;ASCII 码可以不存在;扫描码和 ASCII 码都可以不存在;扫描码和 ASCII 码一定相同

填空

  • 给定一中断号,求中断向量的 CS 的物理地址
  • 给一物理地址,问有多少种段基址和偏移地址组成满足该物理地址
  • 进制转换(9 进制数转 5 进制)
  • 求补码
  • 8086 中,除直接寻址外,哪个寄存器的段寄存器和其他寄存器的段寄存器不同?这个不同的段寄存器是哪个?其他寄存器的段寄存器一般是哪个?
  • 外设编址方式有?8086 是哪种?
    • 统一编址、独立编址;独立编址
  • 多(大于 2)分支结构有哪两种类型?如果数据满足某些限制,哪一种效率更高?
  • 子过程传参最简单的方式是什么?除此之外,还有哪两种方式?
  • 8086,在程序开始前需要设置 DS,通常需要通过 AX 来进行设置,为什么?
  • 0AH 读入字符串长度最大为 12H,问 DX 是多少?

问答

汇编语言?

由助记符和操作数组成的汇编码作为基本元素的、直接描述计算机硬件基本操作序列(指令流)的编程语言

8086 指令分类?

数据传送、算术运算、位操作、串操作、控制转移、处理机控制

数据传送方式有哪些?外设有哪几个寄存器?

  • 直接交换、查询(轮询)、中断、成组传送
  • 数据寄存器、命令寄存器、状态寄存器

画出"直到…不成立"型循环结构的流程图

阅读

DSEG    SEGMENT
ARRAY   DB      75H, 70H, 0AAH, 0C3H
        DB      ...
        ; ARRAY 具体数忘了,总之是有 10 个数
DSEG    ENDS

CSEG    SEGMENT
        ASSUME  CS: CSEG, DS: DSEG
START:
        MOV     AX, DSEG
        MOV     DS, AX
        MOV     CX, 9
OUTER:
        XOR     SI, SI
INNER:
        MOV     AX, ARRAY[ SI ]
        MOV     BX, ARRAY[ SI + 1 ]
        CMP     AX, BX
        JL      SKIP
        XCHG    AX, BX
        MOV     ARRAY[ SI ], AX
        MOV     ARRAY[ SI + 1 ], BX
SKIP:
        _______________ ; 此处待填充
        CMP     SI, 9
        JNZ     INNER
        LOOP    OUTER
CSEG    ENDS
        END     START
  • 指出代码段中的两种错误,在更正错误后,填充代码段中空出来的那一行
  • 问该程序很有可能实现什么算法?更正上述错误后,ARRAY 结果是?
  • 该算法效率还可以优化,为什么?如何优化?

编程

ARM 架构有一条 RBIT 指令,如 R1 = 1100 0010 0001 1110,执行 RBIT R1, R1 后,R1 = 0111 1000 0100 0011,即将 R1 反转,结果存回 R1。8086 没有该指令,请用近过程或宏来实现该指令。要求把 DX(高位):AX(低位) 反转,结果存回 DX:AX

  • 基本要求:

    • 程序大体正确,无明显错误
  • 额外要求:

    • 要求该过程/宏在结束时,不影响除 AX、DX 外的其他通用寄存器
    • 要求该过程/宏在结束时,不影响 FLAGS 寄存器
    • 这条要求太长,忘了具体,大概是和时钟周期有关的
    • 要求该过程/宏是一个原子操作
  • 提示:可通过逻辑左右移实现,以下代码仅供参考

REVERSE   MACRO
; 反转 AX,结果存入 BX
          LOCAL   RAX, RB, NEXT
          MOV     CX, 16
RAX:
          SHR     AX, 1
          JC      RB      ; 若 AX 右移出的那一位是 1,则跳转到 RB
          SHL     BX, 1   ; 若 AX 右移出的那一位是 0,则直接让 BX 逻辑左移 1 位即可
          JMP     NEXT
RB:
          SHL     BX, 1   ; 若 AX 右移出的那一位是 1,则先让 BX 逻辑左移 1 位
          INC     BX      ; 然后让 BX 末尾加 1
NEXT:
          LOOP    RAX     ; 继续下一位直到 AX 全部反转到 BX
          ENDM

RBIT      MACRO
; 通过调用两次 REVERSE 实现反转 DX:AX
          CLI             ; 关中断
          ; 保存寄存器
          PUSH    BX
          PUSH    CX
          PUSH    FLAGS
          ;
          REVERSE         ; 先反转 AX,结果存入 BX
          MOV     AX, DX  ; 将 DX 覆盖 AX
          MOV     DX, BX  ; 将上面原本 AX 的反转结果存 DX
          REVERSE         ; 再反转现在的 AX,也就是反转原本的 DX
          MOV     AX, BX  ; 将反转结果写入 AX 即可
          ; 恢复寄存器
          POP     FLAGS
          POP     CX
          POP     BX
          STI             ; 开中断
          ENDM

以上回忆版仅供参考,预祝各位都能取得自己理想的成绩!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Heuler

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值