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

  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. 试编程实现:从键盘输入一个字符,若是数字,放入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. 某年级参加英语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

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. 试编制程序:以查询方式输出内存 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. 仔细读下图给出的应用系统电路图, 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

(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

(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

(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
一、单项选择题(本大题共20小题,每小题1分,共20分)在每小题列出的四个备选项中只有一个是符合题目要求的,请将其代码填写在题后的括号内。错选、多选或未选均无分。 1.CPU要访问的某一存储单元的实际地址称(   )   A.段地址         B.偏移地址   C.物理地址        D.逻辑地址 2.某存储单元的物理地址是12345H,可以作为它的段地址有(   )   A.2345H        B.12345H   C.12340H       D.1234H 3.执行后使BX=0的同时也使CF=0,OF=0的指令是(   )   A.XOR BX,BX    B.OR BX,BX   C.AND BX,BX    D.CMP BX,BX 4.循环控制指令LoopNZ/LoopNE控制循环继续执行的条件是(   )   A.CX≠0且ZF=1    B.CX≠0且ZF=0   C.CX≠0或ZF=1    D.CX≠0或ZF=0 5.在执行DAA指令,当高四位BCD码校正时产生进位,如要把此进位值送入AH中,对这进位值的操作应是(   )   A.DAA校正指令的功能已自动加在AH中   B.进位值在AF中,校正后根据AF内容再加在AH中   C.进位值在CF中,校正后根据CF内容再加在AH中   D.进位值在AL最高位上,校正后根据AL最高位内容再加在AH中 6.AND,OR,XOR,NOT为四条逻辑运算指令,下面的解释正确的是(   )   A.指令XOR AX,AX执行后,AX内容不变,但设置了标志位   B.指令OR DX,1000H执行后,将DX最高位置1,其余各位置0   C.指令AND AX,OFH执行后,分离出AL低四位   D.NOT AX,执行后,将AX清0 7.在执行下列指令时,需要使用段寄存器DS的指令是(   )   A.STOSW        B.ADD AL,CL   C.NEG BX       D.INC DA[BX] 8.无论BH中原有的数是奇数或偶数,若要使BH中的数一定为奇数,应执行的指令是(   )   A.ADD BH,01H     B.OR BH,01H   C.XOR BH,01H     D.TEST BH,01H 9.完成对CL寄存器的内容乘以4的正确操作是(   )   A.ROL CL,1        B.MUL 4     ROL CL,1   C.SHL CL,1        D.MOV CL,2    SHL CL,1             SHL CL,CL 10.下面各传送指令中,正确的是(   )   A.MOV [DI],[SI]            B.MOV[DX+DI],AL   C.MOV WORD PTR [BX],0100H       D.MOV AL,BX 11.汇编语言语句格式中对名字项的规定如下,请找出其中错误的说法(   )   A.名字的第一个字符可以是大写英文字母及小写英文字母   B.名字的第一个字符可以是字母、数字及、@、_   C.名字的有效长度≤31个字符   D.在名字中不允许出现$ 12.要实现使BETA的值为56,应采用语句为(   )   A.BETA DB 56      B.BETA DB 56H   C.BETA EQU 56      D.BETA EQU 56H 13.REPZ CMPSW指令,重复执行的终止条件是(   )   A.CX=0或ZF=0      B.CX=0且ZF=0   C.CX=0或ZF=1      D.CX=0且ZF=1 14.下面程序段执行后,AL中的内容是(   )   MOV AX,8833H   ADD AL,AH   DAA   A.21       B.21H   C.0C1H      D.0DDH 15.比较两个带符号的数A、B,当A=B时程序转移,测试的条件为(   )   A.ZF=1      B.ZF=0   C.SF=1      D.SF=0 16.检查二个无符号数的关系,若要实现AL≥BL时分支去LOP1处,那么在“CMP AL,BL”指令后应跟的分支指令是(   )   A.JNC LOP1      B.JA  LOP1   C.JC LOP1      D.JGE  LOP1 17.在下列串操作指令中,同时使用源串和目的串地址指针的指令是(   )   A.STOSW      B.LODSW   C.SCASW      D.CMPSW 18.设AL=0AH,下列指令执行后能使AL=05H的是(   )   A.NOT AL         B.AND AL,0FH   C.XOR AL,0FH      D.OR AL,0FH19.DA1  DW‘AB’,‘CD’,‘EF’,‘GH’(   )     ┇    MOV AX,DA1+3  指令执行后AX中的内容是  A.‘EF’   B.‘CD’  C.‘BC’   D.‘FC’20.使用DOS系统功能调用时,使用的软中断指令是(   )  A.INT 21      B.INT 10H  C.INT 16H     D.INT 21H二、填空题(本大题共12空,每空0.5分,共6分)请在每小题的空格中填上正确答案。错填、不填均无分。21.十六进制数0FFF8H表示的十进制正数为________,表示的十进制负数为________。22.若DS=0F3EH,SI=2000H,COUNT=0A8H,指令MOV AX,(SI+COUNT)中,源操作数的有效地址EA为________,其物理地址为________。23.CPU的标志寄存器中标志位,可以分为两大类,其中一类称为________标志位,另一类称为________标志位。24.当标志位________=1时表示无符号数运算产生溢出,而当标志位________=1是表示带符号数运算产生溢出。25.如JMP指令采用段间间接寻址,那么由4个相邻字节单元中存放有转移地址,其中前两个字节存放的是________,而后两个字节存放的是________。26.在串操作程序中,通常在重复前缀指令REPZ或REPNZ后,选用的串操作指令是________或________才有实际意义。三、简答题(本大题共4小题,每小题2分,共8分)27.已知:BX=1357H,DI=2000H,DS=2000H,CS=4000H,分别指出下面各指令中存储器操作数的物理地址。(1)MOV AL,[BX](2)MOV CS:[BX+DI],AH28.0P1 DB 1,2 0P2 DW 3412H,5678H┇ MOV AX,OP1+1;字单元(OP1+1) AX MOV BL,OP2+1;字节单元(OP2+1) BL 上述二条传送语句有语法错误,请根据注释字段的说明,将其改正。29.下列语句在存储器中分别为变量分配多少字节? (1)AD2 DW 10 DUP(?),10 (2)AD3 DD 100 DUP(?)30.简述下面两条指令分别是什么语法错误? MOV [BX],[SI] MOV AX,DL四、程序分析题(本大题共6小题,每小题6分,共36分)31. MOV DL,AL   NOT DL   TEST DL,04H   JE NEXT        ┇ NEXT:…   若上述程序段执行时产生分支,说明AL中的数第几位一定为1?程序段执行后CF是多少?32.DA1  DB‘ABCDEFGHI’  DA2  DB  9 DUP(0)    ┇    LEA SI,DA1    LEA DI,DA2    MOV CX,9    CLD  LOP: LODSB    SUB AL,10H    STOSB    LOOP LOP    . . . 试问:①写出程序执行后DA2各字节中的数据。   ②保持程序功能情况下,程序中 可否改写为 33.已知:BX=4567H   NEG BX   INC BX   NEG BX   DEC BX 程序段执行后,BX=________,CF=________。34.   MOV BL,64H     MOV CL,03H     XOR AX,AX AGAIN:ADD AL,BL    ADC AH,0    DEC CL    JNZ AGAIN 问:(1)该程序段完成的功能是:   (2)AX=________。35.已知数据段中定义 DAT1 DB  12H,34H,56H,78H    MOV CX,0    MOV AX,WORD PTR DAT1    MOV CL,DAT1+3 当程序段执行完后AX=________,CX=________。36.DA1  DB 83H,72H,61H,94H,5AH    ┇     MOV CX,WORD PTR DA1     AND CX,0FH     MOV AL,DA1+3     SHL AL,CL  上述指令序列执行后,AL=_______,CL=_______。五、程序填空题(本大题共2小题,每小题6分,共12分)37.在NUMW单元存放有一个0-65535范围内的整数,将该数除以500,商和余数分别存入QU1和REM单元,请在空行处各填上一条指令完善该程序。   ┇ MOV AX,NUMW _____________ XOR DX,DX DIV BX MOV QUI,AX  _____________38.某程序欲用单个字符显示的2号功能调用去显示STRING中的字符串‘COMPUTER’(不显示字符‘$’!).试在空白处填上适当的一条指令。 STRING DB‘COMPUTER’,‘$’ ┇ MOV BX,0FFSET STRING LOP:MOV DL,[BX]    MOV AH,02H    INT 21H    ____________________    ____________________    JNE LOP六、编程序题(本大题共2小题,第39小题6分,第40小题12分,共18分)39.试编制一程序段,用串操作指令实现以DA_BY为首址的20H个字节单元中存放相同字符‘Y’(设DA_BY存储区已有ES指向)。40.试编制一源程序,统计DA1字单元中含0的个数,如统计的个数为奇数,则将进位位置1,否则进位位清0。    DATA  SEGMENT    DA1  DW  XXXX    DATA ENDS2006年10月汇编语言程序设计试题答案  来源: http://www.csai.cn 2006年10月汇编语言程序设计试题答案一、1、C;2、D;3、A;4、B;5、C;6、C;7、D;8、B;9、C;10、C;11、B;12、C;13、A;14、B;15、A16、C;17、D;18、C;19、D;20、B二、21、+65528;-3276022、20A8H;11488H23、状态;控制24、CF;OF25、IP;CS26、STOS;CMP三、27、(1)21357H;(2)43357H28、MOV AX,WORD PTR(OP1+1)    MOV BL,BYTE PTR(OP2+1)29、(1)22;(2)40030、MOV指令不能在两个存储器操作数之间进行;    操作数类型不匹配四、31、第2位;CF=032、123456789;不能更改33、BX=4565H;CF=134、AX=012CH,将AX内容乘3送BX中35、AX=3412H,CX=0078H36、AL=0A0H,CL=03H五、37、MOV BX,500    MOV REM,DX38、INC BX    CMP [BX],24H六、39、LEA DI,DA_BY        MOV CX,32        MOV AL,‘Y’        CLD        REP STOSB40、CODE SEGMENT          ASSUME CS:CODE,DS:DATA       START: MOV  AX,DATA              MOV  DS,AX              LEA  SI,DA1              MOV  CX,16              XOR BL,BL       AGAIN: MOV  AL,[SI]              HL AL,1              JC NEXT              INC BL        NEXT:INC SI              LOOP AGAIN              TEST BL,01H              JNE  L1              CLC              JMP DONE           L1: STC         DONE: MOV AH,4CH               INT 21H         CODE ENDS              END START  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

zombo_tany

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

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

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

打赏作者

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

抵扣说明:

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

余额充值