x8086软件(dosbox、c51)资源
一、简答题。(10分)
1.写出数据定义语句。(4分)
(1)为缓冲区BUFF预留100个字节的存储空间。
BUFF DB 100 DUP (?)
(2)将字符串‘I am fine.’‘Good.’存放在某数据区。
DATA SEGMENT
STRING DB ‘I am fine.’,‘Good.’
DATA ENDS
2.按下列要求写出相应的指令或程序段。(4分)
(1)用一条指令使AX内容清0,分别用3种方法。
MOV AX,0
XOR AX,AX
SUB AX,AX
(2)使BL寄存器中的高4位和低4位互换。
MOV CL,4
ROL BL,CL
(3)屏蔽CX寄存器的b11、b7和b3位。
AND CX,0F777H
二.编程题(要求编写的能够在dos环境中运行,截图给出运行的结果,并分析结果的对错。这里除了第3题有具体的数据外,其他题目均要求自己定义数据。)
1.试编写一个汇编语言源程序,要求将2个32位的二进制数num1,num2相减,相减的结果存放于num3中。假设不会产生溢出。(10分)
DATA SEGMENT;数据段
NUM1 DD 12345678H ;在存储空间定义一个双字,并用符号名NUM1与存储空间相联系
NUM2 DD 12335677H ;在存储空间定义一个双字,并用符号名NUM2与存储空间相联系
NUM3 DW ? ;预留一个双字的存储空间NUM3
DATA ENDS ;数据段结束
CODE SEGMENT ;代码段
ASSUME CS:CODE,DS:DATA ;将段寄存器与段名关联
START: MOV AX,DATA;
MOV DS,AX ;将段地址装入段寄存器
MOV AX,DS:[0] ;将NUM1低16bit传送至AX
MOV DX,DS:[2] ;将NUM1高16bit传送至DX
MOV CX,DS:[4] ;将NUM2低16bit传送至CX
MOV BX,DS:[6] ;将NUM2高16bit传送至AX
SUB AX,CX ;NUM1低16bit减NUM2低16bit的结果送人AX
SBB DX,BX ;NUM1高16bit减NUM2高16bit的结果送人DX
MOV NUM3,AX ;将相减结果低位存入NUM3
MOV [NUM3+2],DX ;将相减结果高位存入NUM3
MOV AX,4CH ;返回操作系统
INT 21H;
CODE ENDS ;代码段结束
END START ;源程序结束
2.试编写一个汇编语言源程序,求带符号数相除 -47/5的商和余数。(10分)
CODE SEGMENT;代码段
ASSUME CS:CODE;将关联段寄存器与段名。
START:
MOV AX,-47;将-47送入AX
MOV BL,5;将5送入BL
IDIV BL;带符号数相除,
MOV DX,AX;结果保存至DX,高位为余数,低位为商
MOV AX,4CH;返回操作系统
INT 21H;
CODE ENDS;代码段结束
END START;源程序结束
商=0F7H=-9,余数=0FEH=-2
3.试编写一个汇编语言源程序,要求将字符串‘HelLo WorlD.’的大写字母全部改为小写字母。(10分)
DATA SEGMENT
STRING1 DB 'HelLo WorlD.'
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE, DS:DATA
START: MOV AX,DATA
MOV DS,AX
MOV CL,12
MOV BX,0
CHANGE: CMP STRING1[BX],'A'
JBE NEXT
CMP STRING1[BX],'Z'
JAE NEXT
ADD STRING1[BX],20H
NEXT: INC BL
LOOP CHANGE
MOV AH,4CH
INT 21H
CODE ENDS
END START
4.试编写一个汇编语言源程序。设BUF字节单元的值为x,RESULT字节单元的值为y,试编程按以下要求给y赋值。(20分)
2*x (0<=x=<50)
y = x/5 (50<x<200)
200 (x>=200)
DATA SEGMENT ;数据段
BUF DB 10 ;在BUF存储空间中存入10
RESULT DB 2 DUP(?) ;在RESULT存储空间留出两个字节存储结果
DATA ENDS ;数据段结束
CODE SEGMENT; 代码段
ASSUME CS:CODE, DS:DATA; 将段名与寄存器关联
START: MOV AX,DATA;
MOV DS,AX ;定义DS地址
MOV AL,BUF ;将自变量送入AL
CMP AL,0 ;将自变量与0比较
JAE AZERO ;ABOVE ZERO(大于零)跳转
JMP DONE ;小于零结束
AZERO: CMP AL,50 ;将自变量与50比较
JA AFIFTY ;ABOVE FIFTY(大于50)跳转
ADD AL,AL ;小于50时,将自变量自加送入AL(乘以2)
MOV RESULT,AL ;将结果送入RESULT
JMP DONE ;跳转结束
AFIFTY: CMP AL,200 ;将自变量与200作比较
JAE AETH ;ABOVE EQUAL TOW HUNDREDS(大于等于200)跳转
CBW ;小于200将自变量扩展成字,准备作除法
MOV BL,5 ;除数送入BL
DIV BL ;自变量除以5
MOV RESULT,AL ;商保存至RESULT
MOV RESULT+1,AH ;余数保存至RESULT
JMP DONE ;结束
AETH: MOV RESULT,200 ;大于200,结果等于200送入RESULT
DONE: ;返回操作系统
MOV AX,4CH
INT 21H
CODE ENDS ;代码段结束
END START ;源程序结束
Y=2*x,(0<=x<=50)
Y=x/5,(50<x<200)
Y=200,(x>=200)