微机原理习题

阅读汇编程序

1.若有以下变量定义,请说明下面的程序执行后,AX的内容是什么?

复制代码
          TABLE  DW  40,50,20,30
          ENTRY  DW  3
┊
           MOV  BX, OFFSET  TABLE
           ADD  BX,ENTRY
           MOV AX,[BX]

小端存储:低地址存低位。

低地址 28 32 14

高地址 00 00 00

(AX)=1400H

2.分析下列程序完成的功能

复制代码
       MOV AH,02H

       MOV DL,0DH

       INT 21H

       MOV AH,02H

       MOV DL,0AH

       INT 21H
  • MOV AH, 02HINT 21H 调用 DOS 的显示字符功能,DL 中存放要显示的字符的 ASCII 码。

  • 先输出 0DH(回车,CR),将光标移到当前行首。

  • 再输出 0AH(换行,LF),将光标下移到下一行。

  • 组合起来即实现标准意义上的"换行"操作,类似于 C 语言中的 \r\n

使光标回车+换行

3.在下述指令串执行后,画图表示出物理地址为0110AH~0110FH的各单元存放的内容。

复制代码
START:
    MOV  AX,00C0H

    MOV  DS,AX

    MOV  BX,0500H
    
    MOV  CX,0010H

AGAIN:
    MOV  [BX],BL

    INC  BL

    LOOP AGAIN
  • DS = 00C0H → 段基址 = 00C00H

  • BX 初始 = 0500H

  • CX = 0010H (16次循环)

  • 循环体:MOV [BX], BLINC BLLOOP

同时物理地址 = 段基址 × 16 + 偏移地址:

  • DS = 00C0H → 段基址 = 00C00H

  • BX0500H 开始,每次循环 INC BL 会让 BX 加 1(因为低 8 位从 00H 增到 0FH,没有进位到 BH),

    所以偏移地址依次为:0500H, 0501H, 0502H, ... , 050FH

  • 第一次写入:偏移 0500H → 物理地址 00C00H + 0500H = 01100H,写入 BL = 00H

  • 最后一次写入:偏移 050FH → 物理地址 00C00H + 050FH = 0110FH,写入 BL = 0FH

物理地址 内容

0110AH 0AH

0110BH 0BH

0110CH 0CH

0110DH 0DH

0110EH 0EH

0110FH 0FH

4.分析下列程序完成的功能

复制代码
       MOV AL,05H

       SHL AL,1

       MOV BL,AL

       MOV CL,03H

       SHL AL,CL

       ADD AL,BL

SHL:逻辑左移(低位补0,高位进CF)

5*2*8+5*2=5*18=90

将90存到AL中

5.有程序段如下,指出执行后(AX)的值:

复制代码
MOV DX,5678H

MOV BX,1234H

PUSH BX

PUSH DX

PUSH BP

MOV BP,SP

MOV AX,[BP+4]

POP  BP

POPDX 

POPBX 

PUSH :压栈,SP先减2,后传送

PUSH AX (SP=SP-2, SP←AX)

POP :出栈,先取数据,SP加2 (Push的逆操作)

POP BX (BX←SP, SP=SP+2)

低地址 → 原BP ← SP

5678H

1234H

高地址

(AX)=1234H

6.已有BUF DB 0DH 定义,分析下列程序段

复制代码
MOV AL,BUF

CALL FAR PTR HECA


OK:

HECA PROC FAR

PUSH AX

CMP AL,10

JC K1

ADD AL,7

K1:ADD AL,30H

MOV DL,AL

POP AX


RET


HECA ENDP

① 写出子程序HECA的说明文件。

② 程序执行到OK处,(DL)= H

  • CALL:子程序调用指令。

  • FAR PTR :远指针属性操作符,强制指明被调用过程为远过程(段间调用)。

  • HECA:目标过程名。

  • 统一执行步骤:将 AL 加上 30H(48 十进制)。

  • 数值 0~9:加 30H → 30H~39H('0'~'9')。

  • 数值 10~15:先前已加 7,现在加 30H 相当于总加 37H → 41H~46H('A'~'F')。

  • 子程序名:HECA

  • 功能:将 AL 中的一位十六进制数(00H~0FH)转换为 ASCII 字符。

  • 入口参数:AL = 待转换的十六进制数值(应为 0~15,超出范围结果无定义)。

  • 出口参数:DL = 转换后的 ASCII 码('0'~'9' 为 30H~39H,'A'~'F' 为 41H~46H)。

  • 所用寄存器:AL、DL,并通过栈保存/恢复 AX。

  • 调用方式 :远过程(FAR),使用 CALL FAR PTR HECA

  • 算法:若 AL < 10,加 30H;否则加 37H(等价于先加 7 再加 30H)。

②(DL)=44H

7.分析下列程序段,说明完成了什么操作?程序执行前后,HEXNUM字节单元的内容是什么?

复制代码
ASCNUM  DB 41H

HEXNUM  DB ?

        MOV AH,ASCNUM

        CMP AH,39H

        JBE NEXT

        SUB AH,7

NEXT:   SUB AH,30H

        MOV HEXNUM,AH

        HLT

将ASCNUM单元的字符转换成对应的一位16进制数,并将转换后的结果存到HEXNUM单元。

HEXNUM:0AH

8.分析以下程序段完成的功能

复制代码
SUB1 PROC NEAR

    PUSH AX

    PUSH BX

    PUSH CX

    PUSH DX

    MOV  CX, 00FFH

AGAIN: NOP

 LOOP AGAIN

 POP DX

 POP CX

 POP BX

 POP AX

 RET

SUB1  ENDP

一个简单的软件延时子程序,通过在 255 次循环中执行 NOP / LOOP 指令消耗 CPU 时间,实现短暂停顿。延时前后保护并恢复了四个通用寄存器,对调用者无副作用。

数据存储器分析以及数据移动操作汇编

1.下图为某80XCPU扩展外部存贮器电路,试问

1)该外部扩展的数据存储器容量是多少?三片6264的地址范围分别是多少?(假设段地址为6000H,其他地址线未用到的位填1,)

2)编写程序,将电路中6264 2# 的前32个单元的内容送入6264 1# RAM的前32个单元中。(要求用8086汇编语言编写)

(1)3*8Kb*8=24KB

芯片 A15 A14 A13 对应地址范围(段地址 6000H,高4位填1)

6264 1# 0 0 0 F6000H ~ F61FFFH

6264 2# 0 0 1 F6200H ~ F63FFFH

6264 3# 0 1 0 F6400H ~ F65FFFH

(2)

复制代码
; 假设系统处于实模式,可直接操作物理地址

; 设置段寄存器:ES指向目的段(6000H),DS指向源段(6200H)

MOV AX, 6000H      ; 目的段地址(1#)

MOV ES, AX

MOV AX, 6200H      ; 源段地址(2#)

MOV DS, AX

XOR SI, SI         ; 源偏移地址 0

XOR DI, DI         ; 目的偏移地址 0

MOV CX, 32         ; 传送 32 字节

CLD                ; 地址递增方向

REP MOVSB          ; 重复执行 MOVSB,从 DS:SI 到 ES:DI

若使用循环实现,可替换 REP MOVSB 为:

NEXT:

    MOV AL, [SI]

    MOV ES:[DI], AL

    INC SI

    INC DI

    LOOP NEXT

2.下图为某80XCPU扩展外部存贮器电路,试问

1)RAM和EPROM的存储容量各是多少?RAM和EPROM存储器分配的地址范围各是多少?

2)编写程序,将电路中EPROM的前32个单元的内容送入RAM的前32个单元中。(要求用8086汇编语言编写)

RAM:2KB

EPROM:4KB

复制代码
; 将EPROM前32个单元传送到RAM前32个单元

; EPROM地址:05000H~0501FH

; RAM地址:01000H~0101FH



CODE SEGMENT

    ASSUME CS:CODE, DS:DATA, ES:DATA



START:

    ; 设置数据段寄存器(RAM段)

    MOV AX, 0100H       ; RAM段基址 = 01000H / 16 = 0100H

    MOV DS, AX          ; DS指向RAM段

   

    ; 设置附加段寄存器(EPROM段)

    MOV AX, 0500H       ; EPROM段基址 = 05000H / 16 = 0500H

    MOV ES, AX          ; ES指向EPROM段

   

    ; 设置偏移地址和计数器

    MOV SI, 0000H       ; 源偏移地址(EPROM:0000H)

    MOV DI, 0000H       ; 目的偏移地址(RAM:0000H)

    MOV CX, 20H         ; 传送32个字节(20H = 32)

   

    ; 方向标志:地址递增

    CLD                 ; DF=0,SI、DI自动递增

   

    ; 重复传送

NEXT:

    MOV AL, ES:[SI]     ; 从EPROM取一个字节

    MOV [DI], AL        ; 存入RAM

    INC SI              ; 源地址+1

    INC DI              ; 目的地址+1

    LOOP NEXT           ; CX-1,若CX≠0则继续

   

    ; 程序结束

    MOV AH, 4CH         ; DOS功能号:返回

    INT 21H



CODE ENDS

    END START



串操作写法:

与前面到Next字段前相同
    REP MOVSB           ; 重复传送字节串 [DS:SI] → [ES:DI]

   

    MOV AH, 4CH

    INT 21H



CODE ENDS

    END START
相关推荐
行走__Wz2 小时前
【网工入门-eNSP模拟-01】ip地址配置
网络·tcp/ip·智能路由器
yyuuuzz2 小时前
独立站运营的几个技术层面常见问题
大数据·运维·服务器·网络·数据库·aws
utf8mb4安全女神2 小时前
MySQL8.0.43的下载安装【二进制安装】【shell脚本】【环境准备】【my.cnf配置】【修改密码】
linux·服务器·网络
yang)2 小时前
jesd204B应用笔记
网络·笔记
葡萄皮sandy2 小时前
SSE和WebSocket
网络·websocket·网络协议
酉鬼女又兒3 小时前
零基础入门计算机网络网际层核心:IP数据报发送与转发完整流程、静态路由配置方法、路由环路成因与解决方案及历年考研经典例题深度解析
网络·tcp/ip·计算机网络·考研·职场和发展
qq_195821653 小时前
6. 应用层协议实现:CoE协议栈集成、对象字典配置、PDO映射
java·服务器·网络
程序猿零零漆3 小时前
Python核心进阶三连:闭包装饰器、深浅拷贝、网络编程从原理到实战
网络·python
袖手蹲4 小时前
K10 百炼 AI 语音助手从网络配置到全链路语音交互的嵌入式实战
网络·人工智能·交互