调用博主最近登录时间
生活中的HYGGE
河北专升本-汇编程序设计-考前每日一题

河北专升本-汇编程序设计-考前每日一题

hygge
2022-04-25 / 1 评论 / 342 阅读 / 正在检测是否收录...

Snipaste_2022-04-26_13-11-35.png

本文目录

2022年4月11日

题目

假设在内存中有两个带符号 字 数X和Y,计算X和Y差的绝对值(不考虑溢出情况),存放到内存Result单元。

分析

  1. 首先有三个带符号字数的定义在DATA区域
  2. 实现计算差绝对值有三个思路
  3. 总是以大数减去小数
  4. 直接相减,对结果进去取补
  5. 直接相减,对结果乘以-1

    答案

    思路一:总是以大数减去小数

    DATA SEGMENT
     X DW -4
     Y DW -3
     RESULT DW ?
    DATA ENDS
    CODE SEGMENT
     ASSUME CS:CODE,DS:DATA
     START:MOV AX,DATA
     MOV DS,AX;finished initializing data segment
     MOV AX,X
     MOV BX,Y
     CMP AX,BX
     JGE NEXT;比较X是否大于等于Y的值(Compare whether the value of X is greater than the value of Y)
     XCHG AX,BX;Y大于X的值 - 交换AX和BX的值(Y is greater than X - Swap ax and BX values)
     NEXT:SUB AX,BX;AX=X-Y
     MOV RESULT,AX
    
     MOV AH,4CH
     INT 21H
    CODE ENDS
    END START

    思路二三:对结果进行取补或*-1

    DATA SEGMENT
     X DW -4
     Y DW 3
     RESULT DW ?
    DATA ENDS
    CODE SEGMENT
     ASSUME CS:CODE,DS:DATA
     START:MOV AX,DATA
     MOV DS,AX;finished initializing data segment
     MOV AX,X
     MOV BX,Y
     SUB AX,BX;AX=X-Y
     ;方式1:判断AX是否为负数 
     ; TEST AX,AX
     ; JNS NEXT
     ;方式2:判断AX是否为负数
     CMP AX,0
     JG NEXT
     ; 结果的处理方式1:取补
     ; NEG AX;AX=-AX
     ; 结果的处理方式2:乘以-1
     MOV BX,-1
     IMUL BX
    
     NEXT:MOV RESULT,AX
     MOV AH,4CH
     INT 21H
    CODE ENDS
    END START

2022年4月12日

题目

在Data1 Data2单元分别有一个五字节数类似于(123456789ah),计算两个五字节数的和,存放进SUM单元。

思路

多字节数加法,用一个一个字节对应的去加,有进位的问题所以加法应使用ADC指令,第一对相加前应将CF进行清零操作。

答案

DATA SEGMENT
    DATA1 DB 12H,34H,56H,78H,9AH
    DATA2 DB 0ABH,0CDH,0EFH,12H,34H
    SUM DB 6 DUP(0);测试结果:BD 01 46 8B CE 00
DATA ENDS

CODE SEGMENT
    ASSUME CS:CODE,DS:DATA
    START:MOV AX,DATA
    MOV DS,AX;initialize DS
    MOV CX,5 ;5字节循环5次
    LEA SI,DATA1
    LEA DI,DATA2;SI指向DATA1,DI指向DATA2
    LEA BX,SUM;BX指向SUM
    CLC;进位标志位清0
    AGAIN:MOV AL,[SI];AL从DATA1中读取一个字节
    ADC AL,[DI];对应字节相加
    MOV [BX],AL;将结果存入SUM
    INC SI
    INC DI
    INC BX;指向下一次字节
    LOOP AGAIN
    ;5次结束,考虑还会有进位
    ADC BYTE PTR [BX],0;将进位存入SUM

    MOV AH,4CH
    INT 21H
CODE ENDS
    END START

2022年4月13日

题目

(计算多个有符号数字节数的和)
设在数据段Buf单元开始存放了五个字节的有符号数,求五个数的和并将和存入Sum字单元。


2022年4月14日

题目

(8255十六位流水灯)
已知8255的地址为200H-203H,其A口和B口共外接了16个共阳LED灯(送0亮送1灭),编程实现16个LED灯的流水灯功能,即按照PA0-PA1...-PA7-PB0-PB1...PB7-PA0...的顺序循环点亮。


2022年4月15日

题目

在BUFF起始的单元依次存放了9个有符号数,判断其中负数的个数,如果大于5个在屏幕上显示'enough',如果小于5个大于0个显示‘not enough’,如果等于0个显示'zero'。
4.16(难)
键盘输入两个1位BCD数A和B,实现A-B的运算式,并显示在屏幕上。
如'1-2=-1' 需考虑结果为负数。


2022年4月16日(难)

题目

键盘输入两个1位BCD数A和B,实现A-B的运算式,并显示在屏幕上。
如'1-2=-1' 需考虑结果为负数。


2022年4月17日

题目

现有一2Mhz的信号源,通过8253实现以下功能:
通道0每1ms输出一个负脉冲;
通道1产生高电平500ms低电平500ms的方波信号;
通道2接受到门控位信号时,输出一个宽度为5s的负脉冲且采用十进制计数模式。
8253地址为0f8h-0fbh,完成上述功能。


2022年4月18日

题目

使用0AH号功能输入一字符串,判断字符串中是否存在'get'单词,若存在将bh置位为全1,否则清零bh。


2022年4月19日

题目

有两个字节变量A和B,完成以下功能:
若A和B有一个为0,则清零另外一个;
若A和B相等且不等于0,则将两个变量自增1;
其余情况交换A和B两个变量的值。


2022年4月20日

题目

键盘输入一个十六进制数(0-F无需判断),不使用乘法指令和查表指令,计算其对应平方值,存入BH单元。


2022年4月21日

题目

不使用CBW和CWD指令,根据键盘输入的值来实现对应功能。如果键盘输入的是1,则模拟CBW的功能;如果不是1,则模拟CWD的功能。


2022年4月22日

题目

DATA0开始的单元存放了100个类型为字的有符号数,将这些有符号数加负号后,存入DATA1开始的100个字单元。同时判定是否有超限的数,如果有将BH单元置为0FFH,否则清零BH单元。


2022年4月23日

题目

键盘输入一个十六进制数(0-F),在屏幕上显示对应的十进制数。


2022年4月24日

题目

数据段buff1开始的单元有一长度为100字节的字符串,将其逆序传送给buff2开始的单元。如buff1为"abcdef",则buff2为"fedcba"。


2022年4月25日

题目

在字单元Year中存放了数据年,判断该年份是否为闰年,若为闰年则将Flag字节单元清零,否则将Flag单元置为全1。


2022年4月26日

题目

键盘输入一个1-9的数,在屏幕上显示其对应的小写字母。即输入1显示a,输入2显示b以此类推。需要有判定在1-9上的判定程序,如果输入错误直接退出,如果输出正确则显示后可再次输入。


2022年4月27日

题目

用两种方法实现以下功能:
从1号功能从键盘输入10个单字符,然后在屏幕上逆序显示。


2022年4月28日

题目(做不出来也没事)

键盘输入一个数(2-8),使用递归的方法实现输入数的阶乘,将阶乘值送入RESULT字单元。


2022年4月29日

题目

Buff字符串以'$'结尾,将其中的小写字母转换成大写字母后,显示该字符串。(扩展可不做:将其中的大写转小写,小写转大写后显示该字符串)

思路

循环加判断 读入一个就处理一个 最后输出

答案

写的比较繁琐 感觉可以精简几条重复使用的指令

DATA SEGMENT
    BUFF DB 'LiSongKun','$'
DATA ENDS
CODE SEGMENT
    ASSUME DS:DATA,CS:CODE
START:
    MOV AX,DATA
    MOV DS,AX;DS指向DATA段
    LEA SI,BUFF
AGAIN:
    MOV AL,[SI]
    CMP AL,'$'  ;判断是否到达字符串尾部
    JZ DISP     ;到$位就跳DISP结束循环 展示字符串
    CMP AL,'a'  ;非字符串结尾 先和 a 比较
    JB L0       ;如果小于 a 那么有可能会是大写字母 转去校验大写字母
    CMP AL,'z'  ;执行到这里 AL 已知是大于a的
    JA NEXT     ;如果大于a 且 大于z 定不是字母 执行下次循环
    JMP PROC1   ;反之则落在大写字母范围内  跳转去转小写
L0:
    CMP AL,'A'  ;当前字符与A进行比较
    JB NEXT     ;如果小于A 肯定不是字母 就跳下一次循环
    CMP AL,'Z'  ;和Z比较
    JA NEXT     ;如果是大于Z的 那么就不会是字母了  大写A~Z在先前段已经判断过了

PROC1:
    XOR AL,20H  ;标准统一大小写互换的指令
    MOV [SI],AL ;转换后进行回送
    NEXT:
    INC SI      ;指针后移
    JMP AGAIN   ;再次循环
DISP:
    LEA DX,BUFF ;输出的操作
    MOV AH,9
    INT 21H
    MOV AH,4CH
    INT 21H
CODE ENDS
END START

2022年5月7日

题目

已知8086有一可屏蔽中断,其对应中断类型码为8AH。已知8259单片使用且工作于正常eoi,普通全嵌套,边沿触发,非缓冲方式。
该中断对应服务程序为INTQ,服务程序的功能为将200H端口内容送去字节BUF单元。
阅读以前内容完成以下题目:
1.该中断连接了8259的哪个引脚
2.该中断的中断向量的地址是多少
3.完成中断向量的设置
4.完成8259的初始化
5.完成中断服务程序的编写

2022年5月8日

题目

内存X单元中有一7位二进制数据(以字节形式存放即D7位数据位无意义)。以偶校验的形式构成其校验位,并将X的D7位置位为校验位形式。

2022年5月12日

题目

数据段有5组每组长度为20的字符串,键盘输入1-5中的任意数字,显示对应字符串内容。

1

评论 (1)

取消
  1. 头像
    123
      Mac OS X 10.15.7 Mac OS X 10.15.7  /  Google Chrome 102.0.5005.61 Google Chrome 102.0.5005.61

    6666666

    回复