기본적인 프로그래밍 연습의 편집을 실험

내 블로그에 문

1. 쓰기 프로그램은, 다음 식의 계산을 수행하고, 그 결과를 출력한다

								A ←(X-Y+24)/ Z 的商,B ← (X-Y+24)/ Z 的余数
		其中,变量X,Y是32位有符号数,变量A,B,Z是16位有符号数。

직접 코드를 주석 한 코드에

#include<stdio.h>

int x,y,tmp;  
short int a,b,z;

int main()
{
	printf("请按顺序输入x,y,z:\n");
	scanf("%d%d%d",&x,&y,&z);

	_asm{
		mov eax,x   ;把x给eax寄存器
		sub eax,y   ;执行x-y
		add eax,24		;x-y+24
		mov edx,eax   ;为了idiv准备
		shr edx,16     ;将高16位移到低十六位
		idiv z          ;用dx:ax  除以z (z是16位)  dx:ax   /   z   =  ax.......dx  (32位除以16位的模板)
		mov a,ax   ;把商移入a
		mov b,dx	 ;余数移入b
	}
	//printf("%d\n",tmp);
	printf("计算结果为:\n商:%d\n余数:%d\n",a,b);

	return 0;
}

4 개의 데이터 니블로 2 X 데이터 워드 분할은 순차적으로 그 장치에 저장된

#include<stdio.h>

short int x;
short int a,b,c,d;

int main()
{
	printf("请输入一个字数据:\n");
	scanf("%d",&x);
	//x=0x1234; 十进制:x=4660    (0x代表16进制)
	_asm
	{
		mov ax,x  ;x是十六位
		and ax,0fh  ;只保留低四位
		mov a, ax  ; a=4
		
		mov ax,x 
		and ax,0f0h  ;保留al中的高四位
		shr ax,4  ;逻辑右移四位
		mov b, ax  ;b=3

		mov ax,x 
		and ax,0f00h
		shr ax,8
		mov c, ax ;c=2

		mov ax,x 
		and ax,0f000h
		shr ax,12
		mov d, ax  ;d=1
	}
	
	printf("A=%d\nB=%d\nC=%d\nD=%d\n",a,b,c,d);

	return 0;
}

키보드 3. 두 개의 소수에서받는 것은 5보다 크지를 숫자없고, 표시 데이터와 진수 형태이다.

직접 출력이 발생하지 않을 수있는 상황을 방지하기 위해 두 개의 5를 입력하지 마십시오.

#include<stdio.h>
short x,y;
int sum;
int main()
{
	printf("please input two integer that is less than five:");
	scanf("%d%d",&x,&y);

	_asm{
	mov ax,x
	add ax,y
	mov sum,eax
	}

	printf("the sum of %d and %d is: %d\n",x,y,sum);

return 0;
}

4. 키보드 번째 연속 문자 테스트 라인 피드 문자열의 출력이 시작 (3 이상의 입력 문자 스트링의 길이가 큰 것을 가정) 문자열을 수신

#include<stdio.h>

char s[100];
char a,b;

int main()
{	
	printf("please input a string that is more than three :\n");
	scanf("%s",s);

	_asm
	{
		lea ecx,s   ;取首地址
		mov al,[ecx+1]
		mov ah,[ecx+2]
		mov a,al
		mov b,ah
	}

	printf("the char is : %c and %c \n",a,b);

return 0;
}
게시 29 개 원래 기사 · 원의 찬양 (13) · 전망 2769

추천

출처blog.csdn.net/zmx2473162621/article/details/102991344