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