微机原理与应用精炼100题-程序员宅基地

技术标签: 硬件工程  笔记  嵌入式硬件  

  1. 堆栈指针的作用是用来指示栈顶元素

  2. ‏SP做堆栈指针时,其内容必须指向堆栈栈顶

  3. 程序计数器(PC)的位数取决于机器字长

    字长:CPU中运算器一次能处理二进制数的最大位数

  4. 8位补码操作数"1001 0011"等值扩展为16位后,其机器数为1111 1111 1001 0011

    如果最高位是1(表示负数),则扩展位都填1;如果最高位是0(表示正数或零),则扩展位都填0。

  5. 具有指令流水线结构的CPU,一般情况下指令的执行时间主要取决于:主频

  6. 微处理器的字长主频ALU结构以及指令集等功能是影响其处理速度的主要因素。

  7. 微型计算机系统的主要性能指标有:字长存储容量指令系统运算速度系统配置

  8. CPU对外设进行数据传送的方式有程序方式、中断方式、DMA方式。

  9. 微处理器是由算术逻辑部件ALU控制部件寄存器内部总线等4部分组成

  10. 指令的执行由取指令、译码、执行构成

  11. 微型计算机是由微处理器存储器I/O接口系统总线等4部分组成。

  12. 微型计算机系统是在微型计算机基础上,配置系统软件外部设备组成。

  13. 8086CPU的数据总线宽度为16位,地址总线宽度为20位,I/O地址总线宽度为16位

  14. 一个单元的逻辑地址不唯一

  15. 8086CPU从存储器中预取指令,它们采用的存取原则为先进先出原则

  16. 当8086CPU从总线上撤消地址,而使总线的低16位置成高阻态时,其最高4位用来输出总线周期的状态信息

  17. 清除 CF 标志的指令为CLC

  18. 变量/标号的三个属性是段属性, 偏移属性,类型属性

  19. 80486允许有段的重叠和交叉

  20. 8086指令的操作数寻址方式分为:立即寻址寄存器寻址存储器寻址I/O端口寻址

  21. 8086指令的存储器寻址方式分为:直接寻址寄存器间寻址寄存器相对寻址基址加变址寻址相对的基址和变址寻址

  22. 不管是什么CPU,其指令系统都包含如下指令类型:算术运算指令逻辑运算指令数据传送指令

  23. 8086 的堆栈操作总是按双字进行的。

  24. 8086 CPU 复位后,寄存器中的值将进入初始态后CS=0FFFFH,IP=0000H,DS=0000H

  25. 8086、 8088CPU的复位起始工作地址是多少?怎样形成这个地址的?系统一旦被启动,如何自动进入系统程序?

    复位起始工作地址是FFFFOH,这个地址由厂家设置,系统一旦被启动在FFFFF0H处存放一条无条件转移的指令指向系统初始化程序。

  26. 执行单元(EU):从BIU中的指令队列寄存器中取得指令和数据,执行指令要求的操作。

  27. 总线接口单元(BIU):负责与存储器,I/O端口传送数据。

  28. 80X86工作在实模式下时,每个物理存储单元对应唯一的物理地址,其范围是0 ~ FFFFFH

  29. 32位微处理器有两个独立的物理空间,一个是存储空间,另一个是 I/O 空间

  30. 设BUF是变量,指令MOV AL, BUF中源操作数的寻址方式是直接寻址

  31. 指令SUB CX, [BX+2]的源操作数的寻址方式是基址寻址

  32. 实模式下,CPU要执行的下一条指令的逻辑地址分别存放在( CS:IP )寄存器中。

    实模式下,CPU要执行的下一条指令的偏移地址存放在IP 寄存器中,代码段的段基址在CS中,因此逻辑地址存放在CS:IP中。

  33. 下列存储器操作数的段超越前缀可省略的是SS:[BP]

    间址寄存器只能是BX,SI,DI ,BP,其中BP约定查找堆栈段,因此当寻址的操作数在堆栈段,并且用BP作为间址寄存器,此时该段前缀可省略。

  34. 指令MOV AX,[BX]目标操作数、源操作数的寻址方式分别是寄存器寻址,间址寻址

  35. 指令MOV AX,[BX+1234H]的寻址方式是相对的基址和变址寻址

  36. 已知CNT EQU 1223H,则以下与MOV BL,23H等效的指令是MOV BL,LOW CNT

  37. 传送数据时,占用CPU时间最长的传送方式是查询

  38. 分析问题:

    A. MOV [BX], SI

    这个指令试图将 SI 寄存器的值移动到由 BX 寄存器指定的内存地址中。在实模式下,BX 可以作为基址寄存器用于间接寻址,所以这个指令是合法的

    B. MOV [DX], SI

    这个指令试图将 SI 寄存器的值移动到由 DX 寄存器指定的内存地址中。然而,在实模式下,DX 通常不直接用作间接寻址的基址寄存器。它通常与其他寄存器(如 BX)结合使用,形成16位的偏移量,或者在某些指令中作为数据段寄存器使用。因此,这个指令在实模式下是非法的

    C. MOV [AX], SI

    这个指令试图将 SI 寄存器的值移动到由 AX 寄存器指定的内存地址中。但是,AX 是一个累加器寄存器,通常用于算术运算和I/O操作,而不是作为间接寻址的基址寄存器。因此,这个指令是非法的

    D. MOV [CX], SI

    这个指令试图将 SI 寄存器的值移动到由 CX 寄存器指定的内存地址中。CX 是一个计数器寄存器,通常用于循环操作,而不是作为间接寻址的基址寄存器。因此,这个指令也是非法的

  39. MOV SI,EBX指令,两个操作数长度不相等,指令是非法的。

  40. 在实地址模式下,设SS=2FD0H ,DS=2F34H,BP=02F6H,则指令MOV AL,[BP]源操作数的物理地址是2FFF6H

    BP寄存器间址寻址约定查找的是堆栈段,因此操作数的物理地址是SS16+BP=2FD0H16+02F6H=2FFF6H

  41. 指令MOV AX,1234H源操作数的寻址方式是立即寻址

  42. 寻址方式:

    A) MOV AX, [4000H];直接寻址
    B) MOV [BX], AX;寄存器寻址
    C) SUB AX, 2000H;立即寻址
    D) MOV AX, [SI+12H];寄存器相对寻址
    E) MOV CX, [BX];寄存器间接寻址
    F) MOV AX, [SI+BX+10H];
    
  43. 间址寻址寄存器只能是BX,BP,SI,DI

  44. 已知BP=2000H,DS=2000H,SS=1000H,则实模式下,指令MOV AX,[BP+100H]源操作数存放在物理地址为12100H的单元中。

    指令MOV AX,[BP+100]源操作数的寻址方式为基址寻址,BP约定查找的是堆栈段,因此物理地址为SS16+BP+100H=12100H*

  45. 符号指令和机器指令是一对一的关系

  46. 间址寻址寄存器只能是BX,BP,SI,DI

  47. 8086的标志寄存器FLAG中定义的状态标志有6

  48. 寄存器间接寻址方式中,操作数在内存单元中

  49. 系统总线中地址线的功能是指定主存和I/O设备接口电路的地址

  50. 若某个接口电路可以使用查询方式和CPU交换信息,则该接口电路中至少需要设置数据和状态端口

  51. 如果要控制的外部设备是发光二极管,应选用的最佳输入输出控制方式是无条件传送方式

  52. 分析

    A. IN DX,AX - 这是错误的,因为 DX 是一个目标寄存器,而 AX 在这里被用作源端口地址,这是不允许的。

    B. IN DX,AL - 这也是错误的,因为 DX 是一个16位寄存器,而 AL 是一个8位寄存器。你不能将一个8位值放入一个16位寄存器。

    C. IN AX,DX - 这是正确的。这条指令从由 DX 寄存器指定的16位端口读取一个字(16位)到 AX 寄存器。

    D. IN AX,[DX] - 这是错误的,因为x86汇编中的 IN 指令不支持使用方括号 [DX] 来指定间接端口地址。

  53. 三态缓冲器可以用作简单的输入接口

  54. 常用的I/O端口编址方式包括统一编址独立编址两种

  55. 若某数据端口的地址为90H,则由该端口向CPU输入一个数据,使用的指令是IN AL,90H

  56. 80x86系统采用8259A的中断类型码为88H,则中断输入端为$IR_0$,中断服务程序的段地址为00222H,偏移地址为00220H

    (1)由于中断类型码为88H,其低三位为000,所以中断输入端为$IR_0$ (2)中断服务程序的偏移地址和段地址分别为4n和4n+2两个字单元,而4*88H=220H

  57. 系统RAM的240H~243H单 元的内容是90H型中断的中断向量。

    n型中断的中断向量存放在系统RAM的4n-4n+3这4个单元,因此240H-243H里存放的应该是240/4 型中断的中断向量。240H /4=0010010000B=90H

  58. 若已知系统RAM的60H~63H单元的内容依次为25H,34H,96H,18H,则18H型中断服务程序所在代码段的段基址为1896H,中断服务程序入口的偏移地址为3425H

  59. 执行IRET指令,从栈顶弹出的3个字依次送入IP,CS,FR寄存器

  60. 据中断源的不同,中断可以分为硬件中断和软件中断两大类()

    根据中断源的不同,中断可以分为外部中断内部中断两大类。

  61. 实模式下,中断向量是指中断服务程序的入口地址

  62. 80x86有两个外部中断请求线:NMI(non makable interrupt)、INTR(可屏蔽中断)

  63. 8086微机系统的RAM存储单元中,从0000H:002CH开始依次存放23H,0FFH,00H和0F0H四个字节,则向量的中断号为0BH

    002CH/4=向量的中断号

  64. 1片8259A中断控制器可以管理8级中断

  65. 若已知系统RAM的20H~23H单元的内容依次为12H,34H,56H,78H,则08H型中断服务程序的入口物理地址为7B972H。

    ***20H,21H中存放的是08H中断服务程序入口的偏移地址,22H,23H中存放的是08H中断服务程序的段基址,则08H型中断服务程序的入口物理地址为7856H16+3412H=7B972H

  66. 实时时钟中断源包括报警中断和周期中断

  67. 用户中断的中断类型码是71H和0AH

  68. 非屏蔽中断和软件中断不可以被屏蔽。

  69. 软件中断,中断类型码是由指令提供

  70. 利用8254每20ms产生一次中断,若CLK为2MHZ,则工作方式和计数初值分别是方式2,40000

    $N=f_{clk}/f_{out}$

  71. PC机8254的0号计数器提供系统日时钟中断

  72. ‌若某8254的计数器的初值为20000,则该计数器的初值写入时,应设置为二进制

    8254的计数器的初值超过10000,则初值只能选择二进制

  73. 8254计数初值N与输入信号频率$f_{clk}$、输出信号频率的关系为$N=$$f_{clk}/_{fout}$

  74. 8254计数初值N与输入信号频率$f_{clk}$、输出信号频率$f_{out}$的关系为:$N=f_{clk}/f_{out}$

  75. ‏串行异步通信帧格式约定数据位及停止位分别为5~8、1~2位。

  76. 串行异步通信的RS-232C接口标准中,为发送数据而建立的一对控制信号是RTS/CTS

  77. 在Intel 8250芯片中,实现并行数据转换为串行的是发送器

  78. RS232C接口标准中逻辑电平的取值范围,规定:逻辑“1”信号,电平在–3V ~ -15V 之间;逻辑“0”信号,电平在 +3V ~ +15V 之间。

  79. 按照串行数据的时钟控制方式,串行通信可以分为串行同步通信串行异步通信

  80. ‌串行异步通信协议要求收、发双方预置的数据帧格式通信速率必须一致。

  81. 异步通信一帧数据格式中,按照发送的次序,先传送起始位

  82. 8250内部的中断中,优先级最高的是接收数据错中断

  83. 找出错误原因:

    MOV DS,1000H;立即数不能直接送给段寄存器
    MOV BUF,[BX]; (BUF 已定义为字节变量) 两个操作数不能同为内存操作数
    ‌
    MUL 100 ;乘数不能是立即数
    SAL AX,CX ;移位次数只能是立即数或CL寄存器
    
  84. 已知某数据段定义如下,则变量D6的偏移地址是( 0013H )。

    DATA SEGMENT
    D1 DB  5 DUP(0)
    ‏
    D2 DW  2 DUP(?)
    
    D3 DB  'Hello!'
    
    D4 EQU 100; 这是一个等值定义,不占用存储空间,只是一个符号常量 
    
    D5 DD  1234H
    
    D6 DB  ?
    DATA ENDS
    
  85. 已知BUF DW 'AB' ,则汇编后BUF+1单元存放的内容为41H

    双字节数的低位字节存放在低地址单元,高位字节存放在高地址单元。因此(BUF)=42H,(BUF+1)=41H

  86. 两个压缩的BCD数25与58相加,运算后的结果需要进行修正,修正后,运算结果为83H

    ****BCD码调整指令的作用是对二进制的运算结果调整成十进制结果。组合十进制数加法调整指令是对存放在AL中的由两个组合BCD码数相加的和进行修正,得到正确的组合BCD码结果。而这两个BCD码十进制的加法结果是83,因此答案为83H

  87. 将BUF内存单元的偏移地址传送到BX中,可以用MOV BX, OFFSET BUF实现,还可以用功能相同的指令[LEA](<https://www.cnblogs.com/milantgh/p/3919662.html>) BX,BUF 实现。

    (1)不能有多余的空格,例:操作码和操作数之间空格只有一位;操作数和操作数之间不能有空格,用半角逗号隔开。 (2)字符全部大写,并且为半角字符。

  88. 设AX=1234H,BX=5678H,阅读下列程序段,完成相应空格。 该程序段执行后,SP=2000H ,AX=1234H,BX=5678H ,CX=5678H,DX=1234H

    MOV SP, 2000H  ; 将栈指针SP设置为2000H地址  
    
    PUSH AX  ; 将AX寄存器的内容压入栈中  
      
    PUSH BX  ; 将BX寄存器的内容压入栈中
    
    POP CX  ; 从栈中弹出内容到CX寄存器  
    
    POP DX  ; 从栈中弹出内容到DX寄存器  
    
  89. 设DS=2000H,SS=4000H,BX=1000H,BP=1000H, (21000H)=1234H,(21002H)=5678H,(41000H)=3456H,(41002H)=789AH。写出下列三条指令执行后的结果。

    (1)MOV AX,DS:[1000H]      ; AX=1234H。源操作数的物理地址为DS*16+1000H=21000H ,因此寻址的16位操作数为1234H。
    (2)MOV AL,BYTE PTR [BX+2] ; AL=78H。源操作数的物理地址为DS*16+BX+2=21002H ,因此寻址的8位操作数为78H。
    (3)MOV AH,[BP]            ; AH=56H。源操作数的物理地址为SS*16+BP=41000H ,因此寻址的8位操作数为56H。
    
  90. 数据段定义如下则 L1=5, L2=10

    BUF DB  'NJUPT'
    L1 EQU $-BUF   ;L1 是 BUF 的长度
    ‍
    S DB 'EDUCN'
    ‍
    L2 EQU $-S;L2 是 S 的长度
    
  91. 设AX=2345H,BX=98A0H,程序段执行后,SP=0100H ,AX=2345H,BX=2345H ,BP=0FCH,CX=98A0H

    MOV SP,0100H  ;SP=0100H
    PUSH AX       ;SP=00FEH(字减2,双字减4),在这里字是16位
    PUSH BX       ;SP=00FCH
    MOV BP,SP     ;BP=SP=00FCH
    MOV BX,[BP+2] ;源操作数为堆栈段偏移地址为BP+2=00FEH单元的内容,即进栈的AX的值,因此BX=2345H
    POP CX        ;CX=栈顶单元的内容,即进栈的BX的值即98A0H,此时 ;SP=00FEH
    POP AX        ;AX=栈顶单元的内容,即进栈的AX的值即2345H,此时 ;SP=0100H
    
  92. 执行下列指令后,AX寄存器中的内容是1E00H

    TABLE DW 10,20,30,40,50;000AH,0014H,001EH……
    ‏
    ENTRY DW 3
    ‏
    MOV BX,OFFSET TABLE;获取TABLE数组的首地址并存储在BX中
    MOV SI,ENTRY
    MOV AX,[BX+SI]
    
  93. 设数据段有如下定义:请问CN的值是9(十进制结果)

    X   DB  'AB',-1      ;3字节
    Y   DW  12H,4567H    ;4字节
    Z   DB   5 DUP('A')  ;5字节
    CN  EQU  $-Y
    
  94. 设AL=74H,则指令CMP AL,47H执行后,AL的值为74H

  95. ‏在MOV AL ,[BX]指令之后,不可直接使用JZ指令判断AL中内容是否为0

    MOV指令不影响标志寄存器的状态位,因此不能直接使用JZ指令判断AL中内容是否为0

  96. ‎80x86微处理器的标志寄存器中,和串指令相关的的标志位是DF

  97. 设BX中有一个16位带符号数。若要将BX中的内容除2,指令为:SAR BX,1

    若不带符号,则SHR BX,1

  98. 要实现内存某缓冲区中查找有无关键字符’K’,应使用REPNE SCASB指令。

  99. 希望串操作指令自动将地址指针减量,则事先应把DF标志位设置为1

  100. 实地址模式下,DS由程序员赋初值的,而CS由系统赋值。

  101. 该程序段执行后,BX=6

    MOV CX, 16       ; 将计数器CX初始化为16,用于LOOP指令  
    MOV BX, 0        ; 初始化BX为0,可能用于记录某些条件满足的次数  
    MOV DX, 1        ; 初始化DX为1,用作AND操作的掩码  
      
    DON:              ; 标记循环开始的位置  
        MOV AX, 2AB0H ; 将立即数2AB0H加载到AX寄存器  
        AND AX, DX    ; 将AX与DX进行按位与操作,结果存回AX  
        JZ NEXT       ; 如果结果为0(即ZF标志被设置),跳转到NEXT标签  
        INC BX        ; 否则,BX寄存器加1  
      
    NEXT:             ; 标记跳转位置  
        SAL DX, 1     ; 将DX左移1位,相当于乘以2  
        LOOP DON      ; 循环CX次,每次循环后CX减1,直到CX为0时退出循环
  102. 下面程序段的功能是在一组数据中,找出最大数和最小数(有符号数),并分别存入MAX和MIN单元中。请在程序中各横线上填入适当的指令语句。

DATA SEGMENT USE16  
    BUF     DW   500, -600, 67, 433, -1 ; 定义字类型数组BUF,并初始化
    CN      DW   ($ - BUF) / 2 ; 计算BUF数组元素的个数($表示当前位置)
    MAX     DW   ? ; 用于存储最大值
    MIN     DW   ? ; 用于存储最小值
DATA ENDS  
  
CODE SEGMENT USE16  
    ASSUME CS:CODE, DS:DATA  
  
START: MOV AX, DATA ; 将数据段地址加载到AX寄存器  
       MOV DS, AX ; 将数据段地址设置到DS寄存器  
       MOV SI, OFFSET BUF ; 将BUF数组的地址加载到SI寄存器  
       MOV CX, CN ; 将数组元素个数加载到CX寄存器(循环计数器)  
       DEC CX ; 由于数组索引从0开始,所以CX减1  
       MOV AX, [SI] ; 加载数组的第一个元素到AX寄存器  
       MOV MAX, AX ; 假设第一个元素是最大值  
       MOV MIN, AX ; 假设第一个元素是最小值  
  
COMPA: ADD SI, 2 ; 移动SI到下一个元素(字类型占2字节)  
       MOV AX, [SI] ; 加载当前元素到AX寄存器  
       CMP AX, MAX ; 比较AX与当前最大值  
       JL NEXT ; 如果AX小于MAX,跳转到NEXT  
       MOV MAX, AX ; 否则,更新MAX为当前AX的值  
  
NEXT:  CMP AX, MIN ; 比较AX与当前最小值  
       JG LOP ; 如果AX大于MIN,跳转到LOP  
       MOV MIN, AX ; 否则,更新MIN为当前AX的值  
  
LOP:   LOOP COMPA ; 循环,直到CX为0  
       MOV AH, 4CH ; 设置DOS中断号为4CH(程序结束)  
       INT 21H ; 调用DOS中断  
  
CODE ENDS  
    END START

  1. 程序段执行后,AX=4124H,BX=4124H
MOV  AX, 1234H   ; 将立即数1234H加载到AX寄存器中  
MOV  CL, 4       ; 将立即数4加载到CL寄存器中,CL通常用作循环或位移操作的计数寄存器  
ROR  AX, CL      ; 将AX寄存器中的值循环右移CL寄存器指定的位数(这里是4位)  AX=4123H
INC  AX          ; AX寄存器中的值加1  ,AX=4124
MOV  BX, 0       ; 将BX寄存器清零  
ADD  BX, AX      ; 将AX寄存器中的值加到BX寄存器中

  1. 程序段执行后,AX=2+4+6+8+10+12+14+16+18+20 =110
XOR  AX, AX          ; 将AX寄存器清零  
MOV  BX, 2           ; 将BX寄存器设置为2  
MOV  CX, 10          ; 将CX寄存器设置为10(用作循环计数器)  
  
AGA:  
    ADD  AX, BX      ; 将BX的值加到AX上  
    ADD  BX, 2       ; 将BX的值增加2  
    LOOP AGA          ; 循环回到AGA标签,直到CX为0
  1. 已知:AX=0FE66H,CF=1,执行下列指令序列后,CF=1,BL**=**C9H
MOV BL,27H
‎
ROL BL,1
‎
ROR BL,3;循环右移

  1. 数据段和附加段分别定义字符串变量STR1和STR2如下,其中,变量STR1和STR2的偏移地址都为0。执行以下程序段后,SI=5H,AL=31H
STR1  DB 'Hello1ABC'  
STR2  DB 'Hello2ABC'
  
LEA SI, STR1      ; 将STR1的地址加载到SI寄存器中  
LEA DI, STR2      ; 将STR2的地址加载到DI寄存器中  
MOV CX, 9         ; 将CX寄存器设置为9,用于循环次数  
CLD               ; 清除方向标志位DF,使得串操作指令自增SI和DI  
  
REPE CMPSB        ; 重复比较SI和DI指向的字节,直到不匹配或CX为0  
JZ STOP           ; 如果比较结果为零(即相等),跳转到STOP标签  
  
DEC SI            ; 将SI寄存器减1,指向STR1中的前一个字符  
MOV AL, [SI]      ; 将SI指向的字节值加载到AL寄存器中  
  
STOP:             ; STOP标签,表示程序执行到此处停止

  1. DOS功能调用的02H和09H都会破坏AL寄存器的值。
  2. 机器语言和汇编语言都和CPU的硬件结构紧密相关,高级语言不依赖于特定计算机的结构和指令系统
  3. 汇编语言属于低级语言
  4. 在汇编程序的开发过程中,链接之后所产生的文件是.COM文件和.exe文件
  5. 汇编语言源程序可以没有数据段,也可以没有堆栈段,但一定要有代码段
  6. 若从键盘输入字符‘8',屏幕上显示8H
STRING DB 'ABCDEFGHIJ' ; 定义一个字符串  
  
; ... 其他代码 ...  
  
MOV AH, 01H       ; 设置功能号,准备调用DOS中断21H来从键盘读取一个字符  
INT 21H           ; 调用DOS中断,读取的字符ASCII码存放在AL寄存器中  
  
SUB AL, 30H       ; 从AL中减去'0'的ASCII码值,将数字字符转换为对应的数字值  
DEC AL            ; 将得到的数字值减1,因为字符串索引是从0开始的  
  
MOVZX SI, AL      ; 将AL中的值零扩展后移动到SI寄存器中,作为字符串的索引  
MOV BX, OFFSET STRING ; 将STRING字符串的地址放入BX寄存器  
MOV DL, [BX+SI]    ; 根据索引从STRING中取出对应的字符,存放到DL寄存器中  
  
MOV AH, 02H       ; 设置功能号,准备调用DOS中断21H来显示一个字符  
INT 21H           ; 调用DOS中断,显示DL寄存器中的字符

  1. 执行本程序后DL=屏幕上显示内容为
MOV DL, 0         ; 初始化DL寄存器为0  
MOV CX, 8         ; 设置循环计数器CX为8  
MOV BL, 100       ; 将100加载到BL寄存器中
  
AGA: MOV AL, 30H  ; 将30H(ASCII码中的'0')加载到AL寄存器中  
     SHR BL, 1     ; 将BL寄存器中的值右移1位  
     JNC NEXT      ; 如果移位操作没有产生进位,则跳转到NEXT标签  
     MOV AL, 31H   ; 否则,将31H(ASCII码中的'1')加载到AL寄存器中  
  
NEXT: RCL DL, 1    ; 将AL寄存器中的最低位旋转到DL寄存器的最高位  
     MOV AH, 0EH   ; 设置DOS视频服务的功能号,准备输出字符  
     INT 10H       ; 调用DOS中断,输出DL寄存器中的字符到屏幕  
     LOOP AGA      ; 递减CX并检查是否为0,如果不为0则跳转到AGA标签继续循环

  1. 设计基于8086 CPU的汇编语言程序,实现Z=X+Y,其中X和Y均为8位无符号数
DATA SEGMENT
    DX DB ? ; 定义一个字节变量 DX
    DY DB ? ; 定义一个字节变量 DY
    DZ DW ? ; 定义一个字变量 DZ
DATA ENDS

CODE SEGMENT
    ASSUME CS:CODE, DS:DATA ; 设置代码段和数据段的寄存器
    START: MOV AX, DATA ; 将数据段地址加载到 AX 寄存器
        MOV DX, AX ; 将 AX 寄存器的值复制到 DX 寄存器
        MOV AH, 0 ; 将 AH 寄存器的值设置为 0
        MOV AL, DX ; 将 DX 寄存器的值复制到 AL 寄存器
        MOV BL, DY ; 将 DY 寄存器的值复制到 BL 寄存器
        ADD AL, BL ; 将 AL 和 BL 寄存器的值相加,结果存储在 AL 寄存器中
        ADC AH, 0 ; 如果上一步的加法溢出,将溢出值加到 AH 寄存器中
        MOV DY, AX ; 将 AX 寄存器的值复制到 DY 寄存器
CODE ENDS
    END START


  1. ASSUME伪指令的功能是用来指示程序中各实际的段和各段寄存器之间的关系。
  2. 采用分支结构。首先判断X≥0还是X<0,如果X<0,则Y=-1;如果X≥0,则在判断X=0还是X>0,从而确定数值Y。Y的值存放在DTY中。
DATA SEGMENT
    DTX DB ?          ; 定义一个字节大小的变量DTX
    DTY DB ?          ; 定义一个字节大小的变量DTY
DATA ENDS
CODE SEGMENT
    ASSUME CS:CODE, DS:DATA
START: MOV AX, DATA   ; 将数据段地址加载到AX寄存器
       MOV DS, AX     ; 将AX寄存器的值传递给DS寄存器,使DS指向数据段
       MOV AL, DTX    ; 将DTX的值加载到AL寄存器
       CMP AL, 0      ; 比较AL寄存器的值与0
       JGE BGE        ; 如果AL >= 0,则跳转到BGE标签
       MOV AL, 0FFH   ; 如果AL < 0,将0FFH(-1)加载到AL寄存器
       JMP EQ1        ; 无条件跳转到EQ1标签
BGE:  JZ EQ1         ; 如果AL = 0,则跳转到EQ1标签
       MOV AL, 1      ; 如果AL > 0,将1加载到AL寄存器
EQ1:  MOV DTY, AL    ; 将AL寄存器的值存储到DTY变量中
       MOV AX, 4C00H  ; 将4C00H加载到AX寄存器,表示程序正常结束
       INT 21H        ; 调用DOS中断21H,结束程序
CODE ENDS
END START

  1. DOS的1号功能调用是键入字符,且有回显。即AH=01H
  2. 串行通讯分为同步和异步通讯,其中数据传输率高的是同步通讯,这是因为在该方式下,信息的比例较小。
  3. DAC 0803的工作方式:直通方式、单缓冲工作方式、双缓冲工作方式

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/m0_58526902/article/details/137117507

智能推荐

零基础学python_07_列表(修改、添加和删除元素)_添加一个元素"aaa" 删除最后一个元素 判断"aaa"在不在列表中 打印列表的长度 清空-程序员宅基地

文章浏览阅读198次。你创建的大多数列表都将是动态的,这意味着列表创建后,将随着程序的运行增删元素。例如,你创建一个游戏,要求玩家射杀从天而降的外星人;为此,可在开始时将一些外星人存储在列表中,然后每当有外星人被射杀时,都将其从列表中删除,而每次有新的外星人出现在屏幕上时,都将其添加到列表中。在整个游戏运行期间,外星人列表的长度将不断变化。修改列表元素修改列表元素的语法与访问列表元素的语法类似。要修改列表元素,可指..._添加一个元素"aaa" 删除最后一个元素 判断"aaa"在不在列表中 打印列表的长度 清空

吴忠强:刷LeetCode的正确姿势!-程序员宅基地

文章浏览阅读275次。↑↑↑关注后"星标"Datawhale每日干货&每月组队学习,不错过Datawhale干货作者:吴忠强,东北大学,Datawhale成员写在前面最近面试中做...

华为数通方向HCIP-DataCom H12-831题库(判断题:141-160)-程序员宅基地

文章浏览阅读364次。华为数通HCIP H12-831 判断题

2-SAT问题合集-ybtoj-程序员宅基地

文章浏览阅读1.9k次,点赞3次,收藏7次。2-SAT的合集_2-sat

shopee虾皮商品列表数据接口(Shopee.item_search)丨shopee虾皮API接口_调用shopee接口实例-程序员宅基地

文章浏览阅读363次,点赞6次,收藏7次。key=&secret=&q=dress&page=1&sort=&country=.com.my"Shopee平台商品列表数据接口是一种用于获取Shopee平台上商品列表信息的API接口。以上示例中,我们通过调用Shopee平台商品列表数据接口,传入了店铺ID、分类ID、起始日期、结束日期和限制数量等参数,接口返回了指定店铺、分类、日期范围内的商品列表信息。请求参数:q=dress&page=1&sort=&country=.com.my。_调用shopee接口实例

linux修改服务器时区为上海_linux系统时区设置选择上海之后还需要设置-程序员宅基地

文章浏览阅读4.6k次。同事用默认官方的镜像给开发安装好系统之,开发同事发现时区是utc需要修改成cst 操作如下tzselect<<EOF5911EOFyes |cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime执行过程大致如下就是选择了Asia > China &g..._linux系统时区设置选择上海之后还需要设置

随便推点

新浪短网址API接口(3月15日更新)-程序员宅基地

文章浏览阅读469次。新浪旧版开发文档地址:http://open.weibo.com/wiki/Short_url/shorten新浪短网址接口的稳定性和跳转速度还是很给力的,现给出其API说明。该接口支持两种返回格

TOJ 3519.Ones and Zeros_for a certain positive integer n and a certain sys-程序员宅基地

文章浏览阅读341次。题目链接:http://acm.tju.edu.cn/toj/showp3519.html3519. Ones and ZerosTime Limit: 1.0 Seconds Memory Limit: 65536KTotal Runs: 702 Accepted Runs: 395Though numbers are create_for a certain positive integer n and a certain system p such as decimal,

卡巴斯基实验室:2020Q2 APT趋势报告_apt实验室方案-程序员宅基地

文章浏览阅读914次。一、概述卡巴斯基全球研究与分析团队(GReAT)三年多以来一直在发布高级持续性威胁(APT)活动的季度报告。这些报告基于我们的威胁情报研究,提供了我们在私有APT报告中已经发布和详细讨论的部分内容摘要,以突出展示我们认为大家应该关注的重大事件和发现。这是我们系列报告的最新一期,重点关注我们在2020年第二季度期间观察到的活动。二、显著发现5月11日,总部位于英国的超级计算中心ARCHER宣布将在调查安全事件期间关闭对互联网的访问。其网站表明,“ARCHER设施是基于提供核心计算资源的Cray_apt实验室方案

如何阅读科研论文?_如何看科研文章-程序员宅基地

文章浏览阅读704次。本文参考自《沈向洋、华刚:读科研论文的三个层次、四个阶段与十个问题》。“大多数学生应该是在研究生院阶段,我非常喜欢这个阶段的生活,因为这可能是你一生中时间最充足的阶段,以后工作了就会非常忙。我想强调的是在这个阶段,你应该多读书、多读文章。如果你决定要从事科研工作,就需要不断地学习、理解和消化知识,再过渡到自己创造知识、散布知识。”通过科研论文的角度去思考阅读和理解之间的关系,是整个人类智能中非常重要的部分。阅读文章的三个层次:速读、精读与研读。首先是要有“速读”的能力,快速知道一篇文章讲了什么。其次_如何看科研文章

LTE参考信号CRS、DRS、SRS、DMRS详解_lte srs-程序员宅基地

文章浏览阅读8.4w次,点赞16次,收藏153次。SRS:Sounding Reference Signal(上行探测参考信号)作用:上行信道估计,选择MCS和上行频率选择性调度,TDD系统中,估计上行信道矩阵H,用于下行波束赋形。DMRS:DemodulationReference Sgnal,解调参考信号,在LTE中用于PUSCH和PUCCH信道的相关解调。CRS:Cell Reference Signal(小区参考信号) 作用:(1)下行信..._lte srs

有哪些适合在家做的正规兼职工作_阿里云客服和蚂蚁客服哪个好做-程序员宅基地

文章浏览阅读4.1k次。一、阿里巴巴云客服和支付宝的蚂蚁云客服阿里巴巴云客服这个是我个人觉得最可靠的网络兼职,大家可以搜索官方微博进行报名。阿里云客服一般是每个月15号,大家可以关注一下,还在持续更新职位中。蚂蚁云客服也是每个月都招,不是很清楚有没有固定日期,最近受疫情影响推迟了。据入职的网友爆料:时薪在8~15元左右,一小时一个班,可以根据自己的时间选择自己上班时间,工资是次月10号结算。有考试,入群后会有统一学习视频。二、任务平台方便简单,没有难度技巧,花费一点时间就可以。做的一般就.._阿里云客服和蚂蚁客服哪个好做

推荐文章

热门文章

相关标签