河北专升本(微机原理编程题)

目录

第一类、循环结构

1.求内存变量 NUM 中 10 个有符号数的最大值并放入 MAX 中。

2.将 0 至 100 中的奇数求和,结果送 SUM 字单元。

3.编程统计 NUM 字节单元中奇数的个数,将个数存入 RESULT 单元。

4.编程统计 BUF 内存区若干个有符号数中正数、负数、零的个数并保存到相对应的结果单元。

5.把内存 2000H 单元中 10 个有符号字节数分成正数和负数,分别存入 P 和 N 单元,并分别统计正数和负数的个数放入 DL 和 DH 寄存器中,请编程实现。

6.在数据段中 TABLE 开始的存储区为某班级的某门课程的成绩单,共有 20 个 成绩。编程统计其中大于等于 90 分的人数存储到 TOTAL 单元中。

7.在 1000H 为首地址的连续 20 个字节单元中存放了 20 个有符号数据,找出最大的数并存入 2000H 单元。

8.编写程序段,将 AX 寄存器中的内容以相反的顺序传送到 DX 寄存器中,并要 求 AX 中的内容不被破坏,然后统计 DX 寄存器中“1”的个数并存入 BL 中。

9.将内存中以 BUF 为首地址的 100 个字节单元中为原码表示的有符号数,依次 变成用补码表示的有符号数,仍然依次放在原 100 个字节单元中,请编写完整程 序。

第二类、输入输出

1.键盘接收一个小写字母,显示器输出一个大写字母。

2.键盘接收 10 个字母(不区分大小写,不回显),显示器输出 10 个小写字母。

3.请编写完整的程序,完成用单个字符输入的 1 号功能调用,从键盘输入 10 个 字符,然后用 2 号功能以相反的顺序显示输出这 10 个字符。

4.一个采用查询方式输入数据的 I/O 接口中,8 位数据端口地址为 2000H,1 位 状态端口地址为 2002H,外设状态位用 D7 传送,高电平表示数据准备好。设 1000 个字节数据存在内存 BUFFER 为首地址的缓冲区中,写出查询方式输入 1000 个 字节数据的程序段

5.编写完整程序,将键盘输入的小写字母转换成大写字母并输出显示,直到输入 字符‘$’结束。如果输入的不是小写字母时要显示错误提示‘PLEASE INPUT AGAIN!’

6.将 BX 寄存器的 16 进制内容输出到屏幕上,假设 BX=1A2BH。

第三类、数值计算

1.已知 AX 中存放的是有符号数-5,实现((AX)×5+14)/2,结果存入 mem 子单 元。不能使用乘除法指令,编写源程序。

2.实现多字节加法,将 A(A776139FH)+B(C0159471H)求和,结果存入 C 连续 的单元中。

3.设在 A、B 和 C 单元中分别存放着三个数。若三个数都不是 0,则求出三数之和存放在 D 单元中;若其中一个数为 0,则把其它两单元也请 0。请编写源程序。

第四类、分支结构

1.设变量 x 字单元的值为带符号数,x 和 y 为字单元的变量,编写程序,按以下要求给 y 赋值。

2.首地址为 DAT 的数据区中有 3 个互不相等的 8 位无符号整数,请编写完整程序,将这 3 个数的最大值存放到 MAX 单元。

第五类、编码转换

1.把 2 位压缩的 BCD 码变成十进制数。


第一类、循环结构

1.求内存变量 NUM 中 10 个有符号数的最大值并放入 MAX 中。

DATA SEGMENT
    NUM DB 1,-2,3,-4,5,-6,7,-8,9,-10
    MAX DB ?
DATA ENDS
CODE SEGMENT
    ASSUME CS:CODE,DS:DATA
START:MOV AX,DATA
      MOV DS,AX
      MOV AL,NUM
      MOV BX,OFFSET NUM
      MOV CX,9
AGAIN:INC BX
      CMP AL,[BX]
      JGE NEXT
      MOV AL,[BX]
      NEXT: LOOP AGAIN
      MOV MAX,AL
      MOV AH,4CH
      INT 21H
CODE ENDS
    END START

2.将 0 至 100 中的奇数求和,结果送 SUM 字单元。

DATA SEGMENT
      SUM DW ?
DATA ENDS
CODE SEGMENT
      ASSUME CS:CODE,DS:DATA
START:MOV AX,DATA
      MOV DS,AX
      MOV AX,0
      MOV DX,1
      MOV CX,50
AGAIN:ADD AX,DX
      INC DX
      INC DX
LOOP  AGAIN
      MOV SUM,AX
      MOV AH,4CH
      INT 21H
CODE ENDS
   END START

3.编程统计 NUM 字节单元中奇数的个数,将个数存入 RESULT 单元。

DATA SEGMENT
      NUM DB 1,2,3,4,5,6,7,8,9,10
      RESULT DB ?
DATA ENDS
CODE SEGMENT
      ASSUME CS:CODE,DS:DATA
START:MOV AX,DATA
      MOV DS,AX
      MOV DL,0
      MOV BX,OFFSET NUM
      MOV CX,10
AGAIN:MOV AL,[BX]
      TEST AL,01H
      JZ NEXT
      INC DL
NEXT: INC BX
LOOP  AGAIN
      MOV RESULT,DL
      MOV AH,4CH
      INT 21H
CODE ENDS
   END START

4.编程统计 BUF 内存区若干个有符号数中正数、负数、零的个数并保存到相对应的结果单元。

DATA SEGMENT
      BUF DB 10,20,0,0,0,-10,-20,-30,-40,-50
      COUNT EQU $-BUF
      ZS_COUNT DB 0
      FS_COUNT DB 0
      LS_COUNT DB 0
DATA ENDS
CODE SEGMENT
      ASSUME CS:CODE,DS:DATA
START:MOV AX,DATA
      MOV DS,AX
      MOV BX,OFFSET BUF
      MOV CX,COUNT
      XOR DL,DL;初始化正数个数
      XOR DH,DH;初始化负数个数
      XOR AH,AH;初始化零的个数
AGAIN:MOV AL,[BX]
      CMP AL,0
      JG ZS;如果是正数,则跳转
      JL FS;如果是负数,则跳转
      INC AH
      JMP NEXT
   ZS:INC DL
      JMP NEXT
   FS:INC DH
 NEXT:INC BX
      LOOP AGAIN
      MOV ZS_COUNT,DL;保存正数结果
      MOV FS_COUNT,DH;保存负数结果
      MOV LS_COUNT,AH;保存零的结果
      MOV AH,4CH
      INT 21H
CODE ENDS
   END START

5.把内存 2000H 单元中 10 个有符号字节数分成正数和负数,分别存入 P 和 N 单元,并分别统计正数和负数的个数放入 DL 和 DH 寄存器中,请编程实现。

ATA SEGMENT
      ORG 2000H
      BUF DB 2,5,-6,7,-8,9,12,22,-17,19
      P DB 10 DUP(?) ;存正数
      N DB 10 DUP(?) ;存负数
DATA ENDS
CODE SEGMENT
      ASSUME CS:CODE,DS:DATA
START:MOV AX,DATA
      MOV DS,AX
      LEA BX,BUF
      LEA SI,P
      LEA DI,N
      MOV DL,0 ;统计正数
      MOV DH,0 ;统计负数
      MOV CX,10
AGAIN:MOV AL,[BX]
      CMP AL,0
      JGE P1
      MOV [DI],AL ;负数时存入 N 单元
      INC DH ;负数时统计存入 DH
      INC DI
      JMP NEXT
   P1:MOV [SI],AL ;正数时存入 P 单元
      INC DL ;正数时统计存入 DL
      INC SI
 NEXT:INC BX
      LOOP AGAIN
      MOV AH,4CH
      INT 21H
CODE ENDS
   END START

6.在数据段中 TABLE 开始的存储区为某班级的某门课程的成绩单,共有 20 个 成绩。编程统计其中大于等于 90 分的人数存储到 TOTAL 单元中。

DATA SEGMENT
      TABLE DB 77,88,87,90,91,92,76,86,65,93,77,88,87,90,91,92,76,86,65,93
      TOTAL DB ?
DATA ENDS
CODE SEGMENT
      ASSUME CS:CODE,DS:DATA
START:MOV AX,DATA
      MOV DS,AX
      MOV SI,OFFSET TABLE
      MOV CX,20
      MOV BL,0
AGAIN:MOV AL,[SI]
      CMP AL,90
      JB NEXT
      INC BL
 NEXT:INC SI
      LOOP AGAIN
      MOV TOTAL,BL
      MOV AH,4CH
      INT 21H
CODE ENDS
   END START

7.在 1000H 为首地址的连续 20 个字节单元中存放了 20 个有符号数据,找出最大的数并存入 2000H 单元。

DATA SEGMENT
      ORG 1000H
      TABLE DB 77,88,87,90,91,92,76,86,65,93,77,88,100,90,91,92,76,-86,-65,93
DATA ENDS
CODE SEGMENT
      ASSUME CS:CODE,DS:DATA
START:MOV AX,DATA
      MOV DS,AX
      MOV BX,OFFSET TABLE
      MOV AL,[BX]
      MOV CX,19
AGAIN:INC BX
      CMP AL,[BX]
      JGE NEXT
      MOV AL,[BX]
 NEXT:LOOP AGAIN
      MOV BX,2000H
      MOV BYTE PTR [BX],AL
      MOV AH,4CH
      INT 21H
CODE ENDS
   END START

8.编写程序段,将 AX 寄存器中的内容以相反的顺序传送到 DX 寄存器中,并要 求 AX 中的内容不被破坏,然后统计 DX 寄存器中“1”的个数并存入 BL 中。

CODE SEGMENT
      ASSUME CS:CODE
START:PUSH AX
      MOV BL,0
      MOV DX,0
      MOV CX,16
AGAIN:SHL AX,1
      JNC NEXT
      INC BL
 NEXT:RCR DX,1
      LOOP AGAIN
      POP AX
      MOV AH,4CH
      INT 21H
CODE ENDS
   END START

9.将内存中以 BUF 为首地址的 100 个字节单元中为原码表示的有符号数,依次 变成用补码表示的有符号数,仍然依次放在原 100 个字节单元中,请编写完整程 序。

DATA SEGMENT
      BUF DB 100 DUP(?)
DATA ENDS
CODE SEGMENT
      ASSUME CS:CODE,DS:DATA
START:MOV AX,DATA
      MOV DS,AX
      LEA BX,BUF
      MOV CX,100
 NEXT:TEST BYTE PTR [BX],80H ;测试最高位,来判断正负
      JZ ZS ;如果是正数,则保持不变
      AND BYTE PTR [BX],7FH ;如果是负数,最高位置零
      NEG BYTE PTR [BX] ;如果是负数,然后在取补
   ZS:INC BX
      LOOP NEXT
      MOV AH,4CH
      INT 21H
CODE ENDS
   END START

第二类、输入输出

1.键盘接收一个小写字母,显示器输出一个大写字母。

CODE SEGMENT
      ASSUME CS:CODE
START:MOV AH,1 ;调用 1 号功能输入
      INT 21H
      SUB AL,20H ;小写变大写
      MOV DL,AL
      MOV AH,2 ;调用 2 号功能输出
      INT 21H
      MOV AH,4CH
      INT 21H
CODE ENDS
   END START

2.键盘接收 10 个字母(不区分大小写,不回显),显示器输出 10 个小写字母。

CODE SEGMENT
      ASSUME CS:CODE
START:MOV CX,10
AGAIN:MOV AH,1 ;调用 1 号功能输入
      INT 21H
      CMP AL,61H ;如果码值>='a',直接输出
      JAE DISP
      ADD AL,20H ;大写变小写
 DISP:MOV DL,AL
      MOV AH,2 ;调用 2 号功能输出
      INT 21H
      LOOP AGAIN
      MOV AH,4CH
      INT 21H
CODE ENDS
   END START

3.请编写完整的程序,完成用单个字符输入的 1 号功能调用,从键盘输入 10 个 字符,然后用 2 号功能以相反的顺序显示输出这 10 个字符。

CODE SEGMENT
      ASSUME CS:CODE
START:MOV AX,0
      MOV CX,10
  LP1:MOV AH,1
      INT 21H
      PUSH AX
      LOOP LP1
      MOV CX,10
  LP2:POP DX
      MOV AH,2
      INT 21H
      LOOP LP2
      MOV AH,4CH
      INT 21H
CODE ENDS
   END START

4.一个采用查询方式输入数据的 I/O 接口中,8 位数据端口地址为 2000H,1 位 状态端口地址为 2002H,外设状态位用 D7 传送,高电平表示数据准备好。设 1000 个字节数据存在内存 BUFFER 为首地址的缓冲区中,写出查询方式输入 1000 个 字节数据的程序段

   LEA SI,BUFFER
   MOV CX,1000
P: MOV DX,2002H
L: IN AL,DX
   TEST AL,80H
   JZ L
   MOV DX,2000H
   IN AL,DX
   MOV [SI],AL
   INC SI
   LOOP P
   HLT

5.编写完整程序,将键盘输入的小写字母转换成大写字母并输出显示,直到输入 字符‘$’结束。如果输入的不是小写字母时要显示错误提示‘PLEASE INPUT AGAIN!’

DATA SEGMENT
      ERRMSG DB 'PLEASE INPUT AGAIN!',0DH,0AH,'$'
DATA ENDS
CODE SEGMENT
      ASSUME CS:CODE,DS:DATA
START:MOV AX,DATA
      MOV DS,AX
AGAIN:MOV AH,1
      INT 21H
      CMP AL,'$'
      JE EXIT
      CMP AL,'a'
      JB ERROR
      CMP AL,'z'
      JA ERROR
      SUB AL,20H
      MOV DL,AL
      MOV AH,2
      INT 21H
      JMP AGAIN
ERROR:LEA DX,ERRMSG
      MOV AH,9
      INT 21H
      JMP AGAIN
 EXIT:MOV AH,4CH
      INT 21H
CODE ENDS
   END START

6.将 BX 寄存器的 16 进制内容输出到屏幕上,假设 BX=1A2BH。

CODE SEGMENT
      ASSUME CS:CODE
START:MOV BX,1A2BH
      MOV CH,4
 NEXT:MOV CL,4
      ROL BX,CL
      MOV DL,BL
      AND DL,0FH
      CMP DL,10
      JB JB10
      ADD DL,7
 JB10:ADD DL,30H
      MOV AH,2
      INT 21H
      DEC CH
      JNZ NEXT
      MOV AH,4CH
      INT 21H
CODE ENDS
   END START

第三类、数值计算

1.已知 AX 中存放的是有符号数-5,实现((AX)×5+14)/2,结果存入 mem 子单 元。不能使用乘除法指令,编写源程序。

DATA SEGMENT
      mem DW ?
DATA ENDS
CODE SEGMENT
      ASSUME CS:CODE,DS:DATA
START:MOV AX,DATA
      MOV DS,AX
      MOV AX,-5
      MOV BX,AX
      MOV CL,2
      SAL AX,CL
      ADD AX,BX
      ADD AX,14
      SAR AX,1
      MOV mem,AX
      MOV AH,4CH
      INT 21H
CODE ENDS
   END START

2.实现多字节加法,将 A(A776139FH)+B(C0159471H)求和,结果存入 C 连续 的单元中。

DATA SEGMENT
      A DB 0A7H,76H,13H,9FH
      B DB 0C0H,15H,94H,71H
      C DB 5 DUP(0)
DATA ENDS
CODE SEGMENT
      ASSUME CS:CODE,DS:DATA
START:MOV AX,DATA
      MOV DS,AX
      LEA DI,A+3 ;获取 A 内存单元末地址
      LEA SI,B+3 ;获取 B 内存单元末地址
      LEA BX,C+4 ;获取 C 内存单元末地址
      AND AX,AX
      MOV CX,4
AGAIN:MOV AL,[DI]
      ADC AL,[SI]
      MOV [BX],AL
      DEC DI
      DEC SI
      DEC BX
      LOOP AGAIN
      MOV AL,0 ;看结果是否有进位
      RCL AL,1
      MOV [BX],AL
      MOV AH,4CH
      INT 21H
CODE ENDS
   END START

3.设在 A、B 和 C 单元中分别存放着三个数。若三个数都不是 0,则求出三数之和存放在 D 单元中;若其中一个数为 0,则把其它两单元也请 0。请编写源程序。

DATA SEGMENT
      A DW 2
      B DW 5
      C DW 6
      D DW 0
DATA ENDS
CODE SEGMENT
      ASSUME CS:CODE,DS:DATA
START:MOV AX,DATA
      MOV DS,AX
      CMP A,0
      JE NEXT
      CMP B,0
      JE NEXT
      CMP C,0
      JE NEXT
      MOV AX,A
      ADD AX,B
      ADD AX,C
      MOV D,AX
      JMP EXIT
 NEXT:MOV A,0
      MOV B,0
      MOV C,0
 EXIT:MOV AH,4CH
      INT 21H
CODE ENDS
   END START

第四类、分支结构

1.设变量 x 字单元的值为带符号数,x 和 y 为字单元的变量,编写程序,按以下要求给 y 赋值。

DATA SEGMENT
      x DW 5
      y DW ?
DATA ENDS
CODE SEGMENT
      ASSUME CS:CODE,DS:DATA
START:MOV AX,DATA
      MOV DS,AX
      MOV AX,x
      CMP AX,30
      JG MAX
      CMP AX,1
      JL MIN
      MOV y,0
      JMP EXIT
  MAX:MOV y,2
      JMP EXIT
  MIN:MOV y,-2
 EXIT:MOV AH,4CH
      INT 21H
CODE ENDS
   END START

2.首地址为 DAT 的数据区中有 3 个互不相等的 8 位无符号整数,请编写完整程序,将这 3 个数的最大值存放到 MAX 单元。

DATA SEGMENT
      DAT DB 6,7,8
      MAX DB ?
DATA ENDS
CODE SEGMENT
      ASSUME CS:CODE,DS:DATA
START:MOV AX,DATA
      MOV DS,AX
      MOV AL,DAT+0 ;AL←06H
      MOV BL,DAT+1 ;BL←07H
      MOV CL,DAT+2 ;CL←08
   L1:CMP AL,BL
      JA L2 ;AL 中的数据高于 BL 中的数据则跳转
      XCHG AL,BL
   L2:CMP AL,CL ;AL 中的数据高于 CL 中的数据则跳转
      JA L3
      XCHG AL,CL ;AL 中的数据为最大值
   L3:MOV MAX,AL
      MOV AH,4CH
      INT 21H
CODE ENDS
   END START

第五类、编码转换

1.把 2 位压缩的 BCD 码变成十进制数。

DATA SEGMENT
      X DB 32H
      Y DB ?
DATA ENDS
CODE SEGMENT
      ASSUME CS:CODE,DS:DATA
START:MOV AX,DATA
      MOV DS,AX
      MOV CL,4
      MOV AL,X
      SHR AL,CL
      MOV BL,10
      MUL BL
      MOV BH,X
      AND BH,0FH
      ADD AL,BH
      MOV Y,AL
      MOV AH,4CH
      INT 21H
CODE ENDS
   END START

  • 13
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

前端小马

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

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

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

打赏作者

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

抵扣说明:

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

余额充值