• 汇编语言与微机原理 期末复习题整理(大题)


    1. 写出实现下列计算的指令序列。(假定X、Y、Z、W、R都为有符号字变量)
      Z = 2*(W-X)/(5*Y)
    ;因为(5*Y)会出现32位变量,32位变量不能作为除数,所以需要改变运算顺序
    MOV AX,W   ;AX←W
    SUB AX,X     ;AX←W-X
    MOV BX,2     
    IMUL BX      ;AX←2*(W-X)
    IDIV Y       ;AX←2*(W-X)/Y
    CWD;除数变为(DX,AX)
    MOV CX,5
    IDIV CX     ;AX←2*(W-X)/Y/5
    MOV Z,AX;Z←AX
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    1. 试编程实现:从键盘输入一个字符,若是数字,放入DIGITAL单元,若是英文字母,放入ENGLISH单元,其它字符,则放入OTHER单元。
      我的答案:100分
    org 100h
    	.MODEL TINY
    	.STACK 100
    	.DATA 
    digital db 0     ;emu8086不支持"db ?"的写法
    english db 0
    other db 0
    	.CODE
    start: mov ax,@data
    	mov ds,ax
    	mov es,ax
        mov ah,7;7号功能:等待键盘输入
        int 21h;键盘功能调用
        cmp al,30H;0的16进制ascii值为30h
        jl labeloth;ascii<30h,则为其他字符
        cmp al,39H;9的16进制ascii值为39h
        jg label2;ascii>39h,判断是否为字母
        mov digital,al
        jmp exit;多分支类型,跳转
    label2:
        cmp al,41H;'A'的16进制ascii值为41h
        jl labeloth;不是数字而且ascii值小于41h
        cmp al,5AH;'Z'的16进制ascii值为5ah
        jg label3;ascii值>5ah,判断是否可能为小写字母
        mov english,al
        jmp exit
    label3:
        cmp al,61H;'a'的ascii值为61H
        jl labeloth;不是小写字母
        cmp al,7AH;'z'的ascii值为7ah
        jg labeloth;不是小写字母
        mov english,al
        jmp exit
    labeloth:
        mov other,al
    exit:             
        jmp $
        end start
    ret
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    1. 某年级参加英语4级考试的有250名学生,试编写一程序完成60-69,70-79,80-89,90-100四个分数段的统计工作,要求用子程序完成对应分数段的人数统计工作。
    org 100h
    .MODEL TINY
    .STACK 100
    .DATA 
    arr db 58,98,70,50,55,69,64,80,81,74,87,84,94,61,56,68,61,89,87,81,69,68,61,91,73,62,63,77,72,54,74,75,88,61,60,67,90,77,92,75,99,51,72,79,99,94,88,96,52,66,96,70,53,96,68,55,89,71,75,87,91,87,89,95,68,83,79,56,92,87,74,74,71,51,67,52,91,62,76,76,74,57,95,92,90,73,57,56,57,84,85,65,87,66,91,66,84,71,81,72,77,63,73,91,54,99,62,99,97,58,54,99,97,78,61,74,67,92,92,66,96,66,60,81,50,52,63,52,53,85,66,97,73,67,71,93,100,85,56,88,55,57,74,94,66,88,65,98,93,64,62,74,58,70,84,59,96,54,52,78,87,97,56,94,90,78,52,98,70,74,76,89,69,68,84,83,77,92,90,100,76,66,93,51,75,88,94,86,94,97,92,81,99,51,61,59,50,72,53,95,92,52,89,60,61,55,100,90,84,61,59,98,57,89,63,79,88,82,51,88,92,65,67,93,91,60,66,57,62,65,73,75,56,56,95,70,53,60,91,75,60,66,70,94,79,78,50,85,67,51;//随机生成250个数据
    acnt dw 0;//90-100人数
    bcnt dw 0;//80-89人数 
    ccnt dw 0;//70-79人数
    dcnt dw 0;//60-69人数
    .CODE
    start: mov ax,@data
    mov ds,ax
    mov es,ax    
    lea bx,arr
    mov cx,250   
    call calcacnt
    mov acnt,ax;90-100人数
    call calcbcnt
    mov bcnt,ax;80-89人数
    call calcccnt
    mov ccnt,ax;70-79人数
    call calcdcnt
    mov dcnt,ax;60-69人数
    int 21H
    ;子程序名:calcacnt
    ;功能:求90-100人数
    ;入口参数cx=数组元素个数
    ;ds:bx=数组段地址:偏移地址
    ;出口参数:ax=数组元素和
    ;影响寄存器:ax
    calcacnt proc near
        push cx
        push bx;保护现场 
        xor ax,ax
        lea bx,arr
        mov cx,250       
        nexta:
            cmp [bx],90
            jl exita:
            cmp [bx],100
            jg exita:
            inc ax
        exita:       
            inc bx
            loop nexta
        pop bx
        pop cx
        ret
    calcacnt endp
    ;子程序名:calcbcnt
    ;功能:求80-89人数
    ;入口参数cx=数组元素个数
    ;ds:bx=数组段地址:偏移地址
    ;出口参数:ax=数组元素和
    ;影响寄存器:ax
    calcbcnt proc near
        push cx
        push bx;保护现场
        xor ax,ax
        lea bx,arr
        mov cx,250       
        nextb:
            cmp [bx],80
            jl exitb:
            cmp [bx],89
            jg exitb:
            inc ax
        exitb:        
            inc bx
            loop nextb
        pop bx
        pop cx
        ret
    calcbcnt endp        
    ;子程序名:calcccnt
    ;功能:求70-79人数
    ;入口参数cx=数组元素个数
    ;ds:bx=数组段地址:偏移地址
    ;出口参数:ax=数组元素和
    ;影响寄存器:ax
    calcccnt proc near
        push cx
        push bx;保护现场     
        xor ax,ax
        lea bx,arr
        mov cx,250       
        nextc:
            cmp [bx],70
            jl exitc:
            cmp [bx],79
            jg exitc:
            inc ax
        exitc:     
            inc bx
            loop nextc
        pop bx
        pop cx
        ret
    calcccnt endp 
    ;子程序名:calcdcnt
    ;功能:求60-69人数
    ;入口参数cx=数组元素个数
    ;ds:bx=数组段地址:偏移地址
    ;出口参数:ax=数组元素和
    ;影响寄存器:ax
    calcdcnt proc near
        push cx
        push bx;保护现场
        xor ax,ax
        lea bx,arr
        mov cx,250       
        nextd:
            cmp [bx],60
            jl exitd:
            cmp [bx],69
            jg exitd:
            inc ax
        exitd:            
            inc bx
            loop nextd
        pop bx
        pop cx
        ret
    calcdcnt endp
    code ends
    end start
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88
    • 89
    • 90
    • 91
    • 92
    • 93
    • 94
    • 95
    • 96
    • 97
    • 98
    • 99
    • 100
    • 101
    • 102
    • 103
    • 104
    • 105
    • 106
    • 107
    • 108
    • 109
    • 110
    • 111
    • 112
    • 113
    • 114
    • 115
    • 116
    • 117
    • 118
    • 119
    • 120
    • 121
    • 122
    • 123
    • 124
    • 125
    • 126

    4.试编制程序:以查询方式输入100个字节数据存入内存 INBUF 区。

    org 100h
        .MODEL TINY
        .STACK 100
        .DATA
    inbuf db 100 DUP(?);inbuf区存字节数据
        .CODE
    start:
        mov ax,@data
        mov ds,ax
        mov es,ax
        mov bx,offset inbuf;bx指向内存inbuf区
        mov cx,100;循环次数100
    status:
            mov dx,102h
            in al,dx
            test al,80h
            jz status
        mov dx,100h
        in al,dx
        mov [bx],al;al数据存入inbuf
        inc bx;bx指向下一数据
        loop status 
        mov ax,4c00h
        jmp $
        end start
    ret
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    1. 试编制程序:以查询方式输出内存 OUTBUF 区以‘-1’结束的一串字节数据。
        .MODEL TINY
        .STACK 100
        .DATA
    outbuf db 127,-128,0,1,-1
        .CODE
    start:
        mov ax,@data
        mov ds,ax
        mov es,ax
        mov bx,offset outbuf;bx指向outbuf区
    status:
            mov dx,102h
            in al,dx
            test al,80h
            jnz status
        mov dx,100h
        mov al,[bx]
        out dx,al;向输出端口写入数据
        inc bx;bx指向数组下一个数据
        cmp al,-1;条件循环
        jnz status
        mov ax,4c00h
        jmp $
        end start
    ret
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    1. 仔细读下图给出的应用系统电路图, 8255用作系统总线和ADC0809之间的接口电路,通过8254计数通道0输出周期为1ms的信号定时启动对ADC0809模拟通道IN4的A/D转换,计数通道1输出的信号用作ADC0809所需的500KHz时钟信号,A/D转换结束后通过8259的IR2向CPU发送中断请求。如果8259已经完成初始化,全嵌套、非自动中断结束方式,中断类型号为80H~87H。请完成以下几个问题:
      (1) 写出对8255A初始化的程序段(包括设定8255的方式选择控制字、选择ADC0809的模拟通道IN4,输出8254所需要的有效GATE信号)。
      (2) 写出对8254初始化的程序段,输出A/D转换所需要的两个时钟信号。
      (3) A/D转换结束后通过8259的IR2向CPU发送中断请求,产生的中断的类型号是多少?该中断源的中断向量放在内存中的什么位置?如果中断服务程序的入口地址为3210H:7880H,画出中断向量表中的相关存储空间内容。
      (4) 根据(5)中编写的中断服务程序,完成中断向量表的初始化,并开放8259的IR2。
      (5) 编写完整的中断处理程序INTPROC,将模拟通道IN4的一次A/D转换结果读入内存字节变量Temp。
      在这里插入图片描述
      (1)
    ;8255A口工作方式0输入,B口工作方式0输出,C口输出
    ;A口60H,B口62H,C口64H,控制口66H
    mov al,10010000B
    mov dx,66H
    out dx,al
    mov al,04H
    mov dx,62H
    out dx,al
    mov al,01H
    mov dx,64H
    out dx,al
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    (2)

    ;8254的0口在方式2,5*10^6/(1*10^3)=5000=1388H,地址40H
    ;8254的1口在方式3,5*10^6/(500*10^3)=10H,地址42H
    mov al,00110100B
    mov dx,46H
    out dx,al
    mov al,88H
    mov dx,40H
    out dx,al
    mov al,13H
    out dx,al
    mov al,01010110B
    mov dx,46H
    out dx,al
    mov al,0AH
    mov dx,42H
    out dx,al
    ret
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    (3)
    产生中断类型号82H,中断向量存放在中断向量表

    0208H80HIP
    0209H78HIP
    020AH10HCS
    020BH32HCS

    (4)

    mov ax,0
    mov es,ax
    mov bx,82H*4
    mov ax,offset intproc
    mov es:[bx],ax
    mov ax,seg intproc
    mov es:[bx+2],ax
    in al,22H
    and al,11111011B
    mov dx,22H
    out dx,al
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    (5)

    intproc proc far
    	push ax
    	push ds
    	push dx
    	sti
    	mov ax,seg temp
    	mov ds,ax
    	mov dx,60H
    	in al,dx
    	mov temp,al
    	in al,22H
    	or al,00000100B
    	out 22H,al
    	cli
    	mov al,20H
    	out 20H,al
    	pop dx
    	pop ds
    	pop ax
    	iret
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
  • 相关阅读:
    多轨音频编辑软件Multitrack Editor mac中文版主要功能
    (十) ES6 新特性 —— class类
    【优化servlet】
    杰哥教你面试之一百问系列:java集合
    蓝牙地址解析(NAP/UAP/LAP)
    springboot+宴会预定平台 毕业设计-附源码231718
    【MindSpore分布式训练】训练中报错: Destroy info store failed
    多校联测13 菜
    linux笔记(8):东山哪吒D1H移植lvgl(HDMI输出)
    Spring整合tomcat的WebSocket详细逻辑(图解)
  • 原文地址:https://blog.csdn.net/qq_46640863/article/details/127933868