
一、填空
1执行后AX= 45B0H,程序转向L2 。
2上述程序执行后AX=0EDCCH ,DX= 6000H
3(31200H)= 9CH,(31201H)= 6CH。
二、程序填空
1
LEA SI,FLD
R1:ADD AX,[SI]
DIV CL
2
MOV [BX],AL
MOV AL,AH
三、写指令序列
1
MOV CX,AX
TEST AX,8000H
JNZ NEXT
MOV CX,BX
NEXT:RET
2
MOV AX,W
IMUL X
MOV BX,Y
ADD BX,6
IDIV BX
MOV Z,AX
MOV R,DX
3
LEA SI,CONAME
LEA DI,PRLINE
MOV CX,20
CLD
REP MOVSB
4
YIWEI MACRO REG,CNT
MOV CL,CNT
SHL REG,CL
ENDM
lea 0x0(,%eax,8),%edx
nasm格式的汇编
目的0x0(,%eax,8),相对基址变址寻址方式
源%edx
0x0应该是基地址,可能带因子
1lea指令。
此指令是将源 *** 作数(也就是存储单元)的有效地址(也可以叫做偏移地址)传送到目的 *** 作数。。 举例
lea eax, [ebp-4C]
目的 *** 作数 源 *** 作数
这里有两个注意的地方:
(1)源 *** 作数必须是一个存储单元。不能是立即数。
(2)目的 *** 作数必须是8个通用的寄存器。eax ebx ecx edx esp ebp esi edi
讲解:此示例表示的存储单元的有效地址是 ebp-4c 这个结果被传送到eax寄存器中。
数据结构与算法(7)-栈
递归: 在数学与计算机科学中,是指在函数的定义中使用函数自身的方法。也就是说,递归算法是一种直接或者间接调用自身函数或者方法的算法。 通俗来说,递归算法的实质是把问题分解成规模缩小的同类问题的子问题,然后递归调用方法来表示问题的解。
比如很多数学定义是递归的,比如阶乘、斐波那契数列,卢卡斯数列等。对于类似的复杂问题,若能拆分为几个简单的相同或类似的子问题来求解,便称为递归求解。
其数据结构本身具有递归的特性,例如链表,通过指针指向下一个节点,所以在节点中包含了自身。
示例:(打印链表内的所有元素)
在递归算法中,如果当递归结束条件成立只执行return *** 作时,分治法求解递归问题算法一般形式可以简化为:
有些问题虽然本身没有明显的递归结构,但是采样递归求解比迭代求解更简单,比如汉诺塔问题,皇后问题,迷宫问题
一个递归函数在其执行过程中,需要多次进行自我调用,那么递归函数是如何执行的呢?
函数调用: 在高级语言的程序中,函数的调用都是通过栈来进行的。通常在一个函数的运行期间调用另一个函数时,在运行被调用函数之前系统一般需要完成3件事情:
从被调用函数返回需要调用函数之前,系统同样需要完成3件事
当多个函数构成嵌套调用时,按照先调用后返回的原则,上述函数之间的信息传递和控制转移则需要通过栈来实现,即系统将整个程序运行时所需要的数据空间都安排在一个栈中,每当调用一个函数的时候,就在它的栈顶分配一个存储区域,每当这个函数退出时,就释放它的存储区域,从而回到调用函数栈区的栈顶。
示例:
通过汇编看函数调用栈:
一个递归函数的运行过程类似多个函数的嵌套调用,只是调用函数和被调用函数是同一个函数,因此和每次调用相关的一个重要概念是递归函数运行的运行“层次”,假设调用该递归函数的主函数为第0层,则从主函数调用递归函数进入第1层,以后每调用一次就加一层,每返回一层就减一层,直至返回到主函数。
为了保证递归函数正确执行,系统需要设立一个“递归工作栈”作为整个递归函数运行期间使用的数据存储区,每一层递归所需信息构成一个工作记录,其中包括所有的实参,所有的局部变量,以及上一层的返回地址,每进入一层递归就产生一个新的工作记录压入栈顶,每退出一个递归就从栈顶d出一个工作记录,则当前执行层的工作记录称为“活动记录”。
本质上讲呢,在计算机中,函数调用是通过栈(stack)这种数据结构实现的,每当进入一个函数调用,栈就会加一层栈帧,每当函数返回,栈就会减一层栈帧。由于栈的大小不是无限的,所以递归调用的次数过多,占用内存就越多,就会导致栈溢出。
汉诺塔 :汉诺塔(又称河内塔)问题是源于印度一个古老传说的益智玩具。大梵天创造世界的时候做了三根 金刚石 柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上。并且规定,在小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个圆盘。
假设柱子编号分别为A、B、C,盘子的个数为n,我们要做的是将A上的所有盘子按照规则移动到C柱上,B柱作为辅助柱。计算移动次数。
;求10的阶乘 10!=3628800
DATAS SEGMENT
message db 0dh,0ah,9,'10!= $'
c10 dw 10 ;输入时进制转换的数
n dw 10 ;要求阶乘的数
m dw ;步长
c dw ;进位
i dw ;
outputbuffer dw 300 dup() ;
DATAS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS
START:
MOV AX,DATAS ;
MOV DS,AX ;
;-------------------------------------------------------
main proc
mov dx,offset message
mov ah,9
int 21h
call fractor ;
mov cx,di
routput: ;循环输出
push cx ;
mov di,cx ;
call output
;
pop cx
dec cx
cmp cx,0
jge routput
displaylength:
mov dl,0dh
mov ah,2
int 21h
mov dl,0ah
mov ah,2
int 21h
exit:
;
mov ah,07h ;
int 21h ;
mov ax,4c00h ;
INT 21H ;
;
main endp ;
;--------------------------------------------------------
fractor proc near ;
mov cx,n ;
mov i,1 ;
mov m,0
;
push dx
mov di,0d ;
mov ax,di ;
mov bx,2d ;
mul bx ;
mov si,ax
pop dx
;
mov outputbuffer[si],1 ;
ctrli: ;
mov c,0
mov di,0 ;
ctrldi:
;
cmp di,m ;
jbe done ;
jmp cmpc ;
done:
push dx ;
mov ax,di ;
mov bx,2d ;
mul bx ;
mov si,ax
pop dx
;
mov ax,outputbuffer[si] ;
mov bx,i ;
mul bx ;
add ax,c ; ;
adc dx,0 ; ;
mov bx,10000 ;
div bx ;
mov c,ax
push dx ;
mov ax,di ;
mov bx,2d ;
mul bx ;
mov si,ax
pop dx ;
mov outputbuffer[si],dx ;
inc di ;
jmp ctrldi ;
cmpc: ;
cmp c,0 ;
ja three1 ;
jmp next ;
three1: ;
inc m ;
mov ax,c ;
mov outputbuffer[si+2],ax ;
;
next:
inc i
cmp cx,0
jng if0 ;
loop ctrli
if0:
mov di,m ;
ret ;
;
;
;
fractor endp ;
;-----------------------------------------------------
output proc near ;
C2:
push dx ;
mov ax,di ;
mov bx,2d ;
mul bx ;
mov si,ax
pop dx
;
mov bx,outputbuffer[si] ;
bid proc ;
mov cx,10000 ;
mov ax,bx ;
mov dx,0 ;
div cx ;
mov bx,dx
;
mov cx,1000 ;
call ddiv ;
mov cx,100 ;
call ddiv ;
mov cx,10 ;
call ddiv ;
mov cx,1
call ddiv ;
ret
;
bid endp ;
;---------------------------------
ddiv proc ;
mov ax,bx ;
mov dx,0 ;
div cx ;
mov bx,dx ;
mov dl,al ;
add dl,30h ;
mov ah,02h ;
int 21h ;
ret
;
ddiv endp ;
;
ret ;
output endp ;
;--------------------------------------------
CODES ENDS ;
END START ;
以上就是关于急求汇编题的答案全部的内容,包括:急求汇编题的答案、请帮忙翻译汇编语言 应该是一个递归函数、数据结构与算法(8)-栈与递归的关系等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)