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