汇编要求输入一个整数用32位二进制表示出来,并且输出以下四个部分

y992594113 2018-05-31 01:21:12
In MAL an integer is represented using 32 bits. Assume that the bits are numbered right to left from 0 to 31. Thus, the rightmost bit is numbered 0 and the leftmost bit is numbered 31. We say that the bits 0 through 15 form the right half and the bits 16 through 31 form the left half of the integer.
You are required to write a MAL program that prompts a user for a positive decimal integer[ A positive integer is one that is strictly greater than zero.], reads the integer typed by the user and outputs the following values:
1.The total number of 1's in the right half of the binary representation of the integer.
2.The total number of 0's in the left half of the binary representation of the integer.
3.The highest power of 2 that evenly divides the integer[ An integer x evenly divides an integer y if the remainder when y is divided by x is zero.].
4.The value of the largest digit in the decimal representation of the integer.
Example: Suppose the user types the decimal integer 1536. The 32-bit binary representation of 1536 is as follows:
0000 0000 0000 0000 0000 0110 0000 0000
For this example, the required answers are as follows:
1.The number of 1's in the right half of the binary representation of the given integer = 2.
2.The number of 0's in the left half of the binary representation of the given integer = 16.
3.The largest power[ The largest power of 2 that evenly divides 1536 is 9 because 1536 = 3 * 512 = 3 * 2^9. This highest power is also the number of 0's at the end of the binary representation of 1536.] of 2 that evenly divides the given integer is 9.
4.The value of the largest digit in the decimal representation of the given integer = 6.
Program outline:
The outline for your program for Part (a) must be the following.
1.Prompt the user for a positive integer.
2.Read the integer.
3.Compute the four quantities mentioned above and print the answers.
4.Stop.
Programming Suggestions:
1)Each time your program for Part (a) is executed, it should handle just one integer.
2)You may assume that the value typed by the user is a positive decimal integer. Thus, there is no need to do any error checking in this part.
3)There is no need to convert the integer to binary; when the integer is read in (using syscall), it is already in binary form.
4)Use bitwise operations to count the number of 1’s (0’s) in the right (left) half.
5)To find the highest power of 2 that divides the integer, count the number of 0’s at the end of the binary representation or use successive divisions by 2.
6)To extract the decimal digits and compute the largest digit, use successive divisions by 10.
...全文
1617 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
y992594113 2018-05-31
  • 打赏
  • 举报
回复
用Mars4.5
5.1试编写一个汇编语言程序,要求对键盘输入的小写字母用大写字母显示出来。 5.2 编写程序,从键盘接收一个小写字母,然后找出它的前导字符和后续字符,再按顺序输出 5.3 将AX寄存器中的16位数分成4组,每组4位,然后把这四组数分别放在AL、BL、CL、DL中。 5.4 试编写一程序,要求比较两个字符串STRING1和STRING2所含字符是否相同,若相同则显示‘MATCH’,若不相同则显示‘NOT MATCH’。 5.5 试编写一程序,要求能从键盘接收一个个位数N,然后响铃N次。 5.6 编写程序,将一个包含有20个数据的数组M分成两个数组:正数数组P和负数数组N,并分别把这两个数组中的数据的个数显示出来。 5.7 试编制一个汇编语言程序,求出首地址为DATA的100D字数组中的最小偶数,并把它放在AX中。 5.8 把AX中存放的16位二进制数K看作是8个二进制的“四分之一字节”。试编写一个程序,要求数一下值为3(即11B)的四分之一字节数,并将该数在终端上显示出来。 5.9 试编写一汇编语言程序,要求从键盘接收一个四位的十六进制数,并在终端上显示与它等值的二进制数。 5.10 设有一段英文,其字符变量名为ENG,并以$字符结束。试编写一程序,查对单词SUN在该文中的出现次数,并以格式”SUNXXXX“显示出次数。 5.11 从键盘输入一系列以$为结束的字符串,然后对其中的非数字字符进行计数,并显示出计数结果。 5.12 有一个首地址为MEM的100D字数组,试编制程序删除数组中所有为零的项,并将后续项向前压缩,最后将数组的剩余部分补上零。 5.13 在STRING到STRING+99单元中存放着一个字符串,试编制一程序测试该字符串中是否存在数字,如有,则把CL的第五位置1,否则置0. 5.14 在首地址为TABLE的数组中按递增次序存放着100H个16位补码数,试编写一个程序把出现次数最多的数及其出现的次数分别放在AX和CX中。 5.15 数据段中已定义了一个有N个字数据的数组M,试编写一程序求出M中绝对值最大的数,把它放在数据段的M+2n单元中,并将该数的偏移地址存放在M+2(n+1)单元中。 5.16 在首地址为DATA的字数组中,存放了100H个16位补码数,试编写一个程序求出它们的平均值放在AX寄存器中;并求出数组中有多少个数小于此平均值,将结果放在BX寄存器中。 5.17 试编写一个程序,把AX中的十六进制数转换为ASCII码,并将对应的ASCII码依次存放到MEM数组中的四个字节中,例如:当(AX)=2A49H时,程序执行完后,MEM中的4个字节的内容为39H,34H,41H和32H。 5.18 把0~100D之间的30个数存入以GRADE为首地址的30个字数组中,GRADE+i表示学号i+1的学生的成绩。另一个数组RANK为30个学生的名次表,其中RANK+i的内容是学号为i+1的学生的名次。编写一程序,根据GRADE中的学生成绩,将学生名次填入RANK数组中。 5.19 已知数组A包含15个互不相等的整数,试编写一程序,把既在A中又在B中出现的整数存在于数组中C中。 5.20 设在A,B和C单元中存放着三个数,若三个数都不是0,则求出三树之和并存放于D单元中;其中有一个数为0,则把其他两个数也清零。试编写此程序。
"单片机课程设 " 课题名称: 数字电压表 课程原理: 1. 模数转换原理: 试验中,我们选用ADC0809作为模数转换的芯片,其为逐次逼近式AD转换式芯片,其 工作时需要一个稳定的时钟输入,根据查找资料,得到ADC0809的时钟频率在10khz ~1200khz,我们选择典型值640khz。课题要求测量电压范围是0到5V,又ADC0809的要 求:Vref+<=Vcc,Vref->=GND,故我们取Vref+=+5V,Vref- =0V。由于ADC0809有8个输入通道可供选择,我们选择IN0通道,直接使ADC0809的A 、B、C接地便可以了,在当ADC0809启动时ALE引脚电平正跳变时变可以锁存A、B、 C上的地址信息。ADC0809可以将从IN0得到的模拟数据转换为相应的二进制数,由于 ADC0809输出为8位的二进制数,转换时将0到5V分为255等分,所以我们可以得到转 换公式为x/255*5化简为:x/51,x为得到的模拟数据量,也就是直接得到的电压量。 在AD转换完成后,ADC0809将在EOC引脚上产生一个8倍于自身时钟周期的正脉冲,以 此来作为转换结束的标志。然后当OE引脚上产生高电平时,ADC0809将允许转换完的 二进制数据输出。 2. 数据处理原理: 由ADC0809的转换原理可以知道我们从其得到数据还只是二进制数据,我们还需要进 一步处理来的到x的十进制数,并且对其进行精度处理,也就是课题要求的的精确到 小数点后两位,在这里我们用51单片机对数据进行处理。我们处理数据的思路是: 首先将得到的二进制数直接除以十进制数51,然后取整为x的整数部分,然后就是将 得到的余数乘以10,然后再除以51,再取整为x的十分位,最后将得到的余数除以5 得到x的百分位。 3. 数据显示原理: 试验中我们用到四位一体的七段数码管,所以我们只能考扫描显示来完成数码管对 x的显示,我们用的是四位数码显示管,但是x只是三位的,故我们将将第四位显示 为单位U,通过程序的延时,实现四位数码管的稳定显示。 课程电路和仿真图: 实验中我们采用的protus仿真。 我们将单片机得P0口接上拉电阻后与数码管的8位段选相连,若不接上拉电阻将无法驱 动数码管,用P2口得4到7位连接数码管的段选,考虑到整体的PCB布线,我选用 P3.2口作为ADC0809的时钟输出端,并用到单片机的定时器。用P3.5传输ADC0809的 START启动信号,用P3.6作为ALE的信号传输,P3.3作为OE的连接端。IN0为输入端 ,而ADC0809的IN1到IN7悬空,不作连接。单片机EA接高电平。而P3口从ADC08 09的输出端输入数据。 实验程序代码:   本次实验我用到的是最底层的汇编语言。 ORG 0000H LJMP START ORG 000BH CPL P3.2 MOV TH0,#0FFH MOV TL0,#0FFH RETI ORG 0014H START: MOV PSW,#0FFH MOV R1,#00H MOV R2, #00H MOV R3,#00H //清零寄存器 MOV IE ,#82H //设置IE,开启定时器,关闭其他中断 MOV TMOD ,#01H //定时器T0,方式1,给ADC0809时钟信号 MOV TH0, #0FFH MOV TL0, #0FFH SETB TR0 //启动定时器 LOOP1: CLR P3.5 // 清零并启动ADC0809 CPL P3.5 CPL P3.5 CLR P3.6 //初始化ALE,并启动 SETB P3.6 SETB P3.4 LOOP2: JNB P3.4 , LOOP2 //扫描EOC SETB P3.3 // 允许输出 MOV P1,#0FFH MOV A,P1 MOV B,#51 DIV AB MOV DPTR,#DTAB MOVC A,@A+DPTR ORL A,#20H MOV R1,A //得到个位和小数点存于R1 MOV A,B MOV B,#10 MUL AB JNB PSW.2,LOOP3 CLR PSW.2 INC A MOV B,#51 DIV AB ADD A,#5 MOV R0,B AJMP LOOP4 LOOP3: MOV B,#51 DIV AB MOV R0,B LOOP4: MOV DPTR,#DTAB MOVC A,@A+DPTR MOV R2,A //得到十分位存于R2 MOV A,B // MOV A,R0 MOV B,#10// MOV B,#5 MUL AB //DIV AB JNB PSW.2,LOOP5 CLR PSW.2 INC A MOV B,#51 DIV AB ADD A,#5 AJMP LOOP6 LOOP5: MOV
实验三 算术运算与代码转换程序设计 一、实验目的 1)掌握算术运算程序的设计方法。 2)掌握代码转换程序的设计方法。 3)进一步掌握各种程序结构。 4)熟练掌握和使用用DEBUG调试程序。 二、实验内容 1)编制两个多字节整数加法和减法程序,并将结果按十六 进制形式显示在屏幕上。 2)编制程序实现二进制定点数与十进制数的ASCII码串之 间转换,并将结果显示在屏幕上。 3)编写程序计算从键盘输入两个不超过四位的十进制数的 和、差、积、商,并以十进制形式输出。 4)写程序把从键盘输入的四位十六进制数转换为压缩的BCD码,并 显示输出。 5)编写一通用过程用来将十进制数(从键盘输入)转换为 P(从键盘输入)进制数。 三、实验设备 PC机一台 四、实验步骤 1) 按程序流程图编制实验程序。 2) 输入源程序。 3) 汇编、连接程序,执行程序,检查结果。 4) 程序的执行可用DEBUG的G命令,也可用T命令单步跟踪 执行。 5) 用D命令检查执行结果。 六、源程序 实验一 DATA SEGMENT NUM1 DB 22H,33H,44H,55H,66H,77H NUM1L DB 6H NUM2 DB 22H,22H,22H,22H NUM2L DB 4H OUTCOME1 DB 10H DUP(0) OUTCOME2 DB 10H DUP(0) N DB 0H DATA ENDS STACK1 SEGMENT PARA STACK DW 20H DUP(0) STACK1 ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:STACK1 START:MOV AX,DATA MOV DS,AX MOV CH,0 MOV SI,OFFSET NUM1 MOV DI,OFFSET NUM2 MOV AH,NUM1L MOV AL,NUM2L CMP AH,AL JAE CHA XCHG SI,DI XCHG AH,AL CHA:SUB AH,AL MOV CL,AL CLC MOV BX,OFFSET OUTCOME1 LOP1:MOV AL,[DI] PUSH CX MOV CL,[SI] ADC CL,AL MOV [BX],CL INC BX INC SI INC DI POP CX LOOP LOP1 MOV CL,AH JCXZ LOP3 LOP2:PUSH CX MOV CL, BYTE PTR [SI] ADC CL,0 MOV [BX],CL POP CX INC BX INC SI LOOP LOP2 LOP3:MOV CH,0 MOV SI,OFFSET NUM1 MOV DI,OFFSET NUM2 MOV AH,NUM1L MOV AL,NUM2L CMP AH,AL JAE CHA1 XCHG SI,DI XCHG AH,AL CHA1:SUB AH,AL MOV CL,AL CLC MOV BX,OFFSET OUTCOME2 LOP11:MOV AL,[DI] PUSH CX MOV CL,[SI] SBB CL,AL MOV [BX],CL INC BX INC SI INC DI POP CX LOOP LOP11 MOV CL,AH JCXZ LOP7 LOP21:PUSH CX MOV CL, BYTE PTR [SI] SBB CL,0 MOV [BX],CL POP CX INC BX INC SI LOOP LOP21 LOP7:MOV DI,OFFSET OUTCOME1 ADD DI,10H MOV CX,11H LOP4: MOV DL,[DI] DEC DI CMP N,0H JNE LOP5 CMP DL,0H JE LOP9 LOP5:PUSH DX PUSH CX MOV CL,4H SHR DL,CL POP CX CMP DL,9H JBE LOP6 ADD DL,7H LOP6:ADD DL,30H MOV AH,2 INT 21H MOV N,1H POP DX AND DX,0FH CMP DL,9H JBE LOP8 ADD DL,7H LOP8:ADD DL,30H MOV AH,2 INT 21H MOV DL,'H' MOV AH,2 INT 21H LOP9:LOOP LOP4 MOV N,0 MOV DI,OFFSET OUTCOME2 ADD DI,10H MOV CX,11H LOP14: MOV DL,[DI] DEC DI CMP N,0H JNE LOP15 CMP DL,0H JE LOP19 LOP15:PUSH DX PUSH CX MOV CL,4H SHR DL,CL POP CX CMP DL,9H JB

21,459

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧