汇编语言(32位二进制数的减法、带符号数除法、字符串大小写转换、分段函数求值,含源程序)

x8086软件(dosbox、c51)资源

https://download.csdn.net/download/qq_51864704/84697203icon-default.png?t=M276https://download.csdn.net/download/qq_51864704/84697203

一、简答题。(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)

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值