求一道微机原理答案,是一道多位乘一位的乘法运算,求助

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了求一道微机原理答案,是一道多位乘一位的乘法运算,求助相关的知识,希望对你有一定的参考价值。

在M1单元存有以ASCII码表示的被乘数82956(高位在前),M2单元存着乘数8,要求实现乘法运算,将结果以组合BCD码形式存放在RESULT开始的存储单元里

参考技术A 在emu8086中调试的
data segment
m1 db 38h,32h,39h,35h,36h
m2 db 38h
result1 db 6 dup(00h)
result db 3 dup(0)
data ends

stack segment
sta db 20 dup()
top dd length sta
stack ends

code segment
assume cs:code,ds:data,ss:stack,es:data
start: mov ax,data
mov ds,ax
mov ax,stack
mov ss,ax
mov ax,top
mov sp,ax

mov si,offset m2
mov bl,[si]
and bl,0fh
mov si,offset m1
add si,04h
mov di,offset result1
mov cx,05
loop1: mov al,[si]
and al,0fh
dec si
mul bl
aam
add al,[di]
aaa
mov [di],al
inc di
mov [di],ah
loop loop1

mov cx,06 ;将计算结果显示出来
mov si,offset result1+5
displ: mov ah,02
mov dl,[si]
add dl,30h
int 21h
dec si
loop displ

mov si,offset result1+5 ;将result1中以非压缩bcd码形式保存的结果,以组合码得形式存入result中
mov di,offset result
mov bx,03h
a1: mov al,[si]
mov cl,4
shl al,cl
dec si
add al,[si]
mov [di],al
inc di
dec si
dec bx
cmp bx,00h
jnz a1

mov ax,offset result ;把result的偏移地址给ax,以便在内存中查看结果

code ends
end start本回答被提问者采纳
参考技术B DATAS SEGMENT ;定义数据段,DATA为段名
M1 DB '82956'
M2 DB 8H
RESULT DB '000000'
DATAS ENDS ;定义数据段结束

STACK SEGMENT STACK ;定义堆栈段
DB 50 DUP(0) ;定义20个连续存储区
STACK ENDS ;堆栈段定义结束

CODE SEGMENT ;定义代码段
ASSUME DS:DATAS,CS:CODE
START:
MOV AX,DATAS ;将DS初始化为数据段首址的16位段值DATA2
MOV DS,AX

LEA SI,M1 ;显示M1和8相乘的计算式
MOV CL,5
MOV AH,2H
MOV DX,0
NEXT1:
MOV DL,[SI+4]
INT 21H
DEC SI
DEC CL
JNZ NEXT1
MOV DL,'*'
INT 21H
MOV DL,'8'
INT 21H
MOV DL,'='
INT 21H

MOV CL,5 ;循环计算部分
MOV BL,8
LEA SI,M1
LEA DI,RESULT
NEXT2:
MOV AL,[SI] ;取第SI位,按位相乘
SUB AL,30H
MUL BL
AAM
ADD AL,DH
AAA
MOV DH,AH
MOV [DI],AL ;将计算结果以BCD码形式保存到RESULT中
MOV DH,AH
INC SI
INC DI
DEC CL
JNZ NEXT2
MOV [DI],DH

MOV AH,2
LEA SI,RESULT ;显示RESULT的数值
MOV CL,6
MOV DX,0
NEXT3:
MOV DL,[SI+5]
ADD DL,30H
INT 21H
DEC SI
DEC CL
JNZ NEXT3

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

;采用masm编辑

一道dp题目

dp+排列组合

【题目描述】:
给你一串序列,定义一个数是好的当且仅当这个数只含有4或7,定义一个不幸运的序列当且仅当这个序列不含有两个相同的好数,求长度为k的不幸运的子序列的个数,对1e9+7取模

n,k<=100000,每个元素大小不超过1e9

【解题思路】:

我们要发现一个惊人的性质:幸运的数很少:1e9以内只有不超过1022个(好像是),并且根据乘法原理:k1为幸运数的个数,k2为非幸运数的个数。令f[i]表示选i个幸运数字,且整体是不幸运的方案数;m为所有不幸运数的个数那么答案就等于:
\[\sum_{k2=1}^{k}C_m^{k2}*f[k-k2]\]

那么问题来了:怎么计算f[i]?考虑dp:令dp[i][j]表示从前i种幸运数字选长度为j的不幸运序列的方案数;bkt[i]表示第i种幸运数的个数,那么
\[dp[i][j]=dp[i-1][j]+dp[i-1][j-1]*bkt[i]\]

期望得分:100

以上是关于求一道微机原理答案,是一道多位乘一位的乘法运算,求助的主要内容,如果未能解决你的问题,请参考以下文章

计算机组成原理运算器组成实验

补码一位乘(布斯公式)

408计算机组成原理—原码的乘法运算

408计算机组成原理—原码的乘法运算

每周一道算法题002:四则运算

一道C语言编程题,求大神们帮帮忙,谢谢了。。