本文目录
2022年4月11日
题目
假设在内存中有两个带符号 字 数X和Y,计算X和Y差的绝对值(不考虑溢出情况),存放到内存Result单元。
分析
- 首先有三个带符号字数的定义在DATA区域
- 实现计算差绝对值有三个思路
- 总是以大数减去小数
- 直接相减,对结果进去取补
直接相减,对结果乘以-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中的任意数字,显示对应字符串内容。
6666666