函数高考汇编_高考函数经典例题
1.汇编程序写一个分段函数的解释。
2.编写一个汇编函数
3.printf()函数调用对应的汇编代码如下,res为int变量,请详解各个汇编指令的意思。
4.汇编符号函数编程
; 本程序在MASMPlus 1.2集成环境下通过编译,经过调试,运行正确。
Code Segment
Assume CS:Code,DS:Code
x db ? ;自变量
y db ? ;因变量
Press_Key db 7,13,10,13,10,'The complated. Press any key to exit...$'
; -------------------------------------
Start: push cs
pop ds
push cs
pop es
mov al,x
test x,80h ;<0?
jz @@Positive
shl al,1 ;y=2x
mov y,al
jmp Exit_Proc
@@Positive: cmp al,10 ;<10?
jg @@Great10
mov y,al
shl al,1
add y,al ;y=3x
jmp Exit_Proc
@@Great10: shl al,1
shl al,1 ;y=4x
mov y,al
; -------------------------------------
Exit_Proc: lea dx,Press_Key ;提示操作完成,按任意键结束程序
mov ah,9
int 21h
mov ah,1
int 21h
mov ah,4ch ;结束程序
int 21h
Code ENDS
END Start ;编译到此结束
汇编程序写一个分段函数的解释。
超级模块源码。
置汇编代码()
push(0)
push(1)
push(十六到十(“428E0000”))
push(十六到十(“431D0000”))
mov_ecx(十六到十(“77758788”))
mov_eax(十六到十(“00442840”))
call_eax()
ret()
调用函数(进程ID,取汇编代码())
扩展资料:
函数作为另一个函数调用的实际参数出现。这种情况是把该函数的返回值作为实参进行传送,因此要求该函数必须是有返回值的。例如: printf("%d",max(x,y)); 即是把max调用的返回值又作为printf函数的实参来使用的。
在函数调用中还应该注意的一个问题是求值顺序的问题。所谓求值顺序是指对实参表中各量是自左至右使用呢,还是自右至左使用。对此,各系统的规定不一定相同。介绍printf 函数时已提到过,这里从函数调用的角度再强调一下。
百度百科-函数调用
编写一个汇编函数
当X>=0的时候,执行到步骤6(把 1 传送到 AL 中),接着顺序执行步骤7,把AL的值(1)传送到Y。
当X<0的时候,执行到步骤3,判断条件跳转不成立,继续执行下面的步骤4,把0传送到AL,然后直接无条件跳转到步骤7,把AL的值(0)传送给Y。
printf()函数调用对应的汇编代码如下,res为int变量,请详解各个汇编指令的意思。
#include <stdio.h>
int fun(int i)
{
int sum=0,n=0;
if(i==0)
for(int m=0;m>=0;m++)
{
if(i%2==0&&n<10)
{
sum=sum+m;
n=n+1;
}
}
else
for(int m=0;m>=0;m++)
{
if(m%5==0&&n<10)
{
sum=sum+m;
n=n+1;
}
}
return sum;
}
void main()
{
int a=0;
printf("input a number:\n");
scanf("%d",a);
fun(a);
}
汇编符号函数编程
000E145A mov esi,esp //esi=esp,保存esp
000E145C mov eax,dword ptr [res] //eax=res的指针
000E145F push eax //压栈eax,传递参数用
000E1460 push 0E5858h //压栈格式化字符串
000E1465 call dword ptr ds:[0E92C0h] //printf的调用
000E146B add esp,8 //2个参数+8,平衡堆栈
000E146E cmp esi,esp //对比esi和esp
000E1470 call __RTC_CheckEsp (0E1136h) //debug版的检查堆栈平衡
DATAS SEGMENT
x dw 11 ;此处变换X的取值
y dw ?
DATAS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS
START:
MOV AX,DATAS
MOV DS,AX
mov ax,x
cmp ax,0
jl let1
cmp ax,10
jg let2
mov bx,3
add ax,bx
mov y,ax
jmp over
let1:
mov bx,1
add ax,bx
mov y,ax
jmp over
let2:
mov bx,5
add ax,bx
mov y,ax
jmp over
over: ;输出Y的值
mov ax,y
MOV CX,0
MOV BX,10
SHUCHU2:
MOV DX,0
INC CX
IDIV BX
PUSH DX
CMP AX,0
JNZ SHUCHU2
SHUCHU3:
POP AX
ADD AX,0030H
MOV DL,AL
MOV AH,2
INT 21H
LOOP SHUCHU3
MOV AH,4CH
INT 21H
CODES ENDS
END START
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。