庄生晓梦

庄生晓梦迷蝴蝶

博客园 首页 新随笔 联系 订阅 管理
http://qwop.iteye.com/blog/1958761
// lodsb.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include <string.h>

/************************************************************************/
/* 载入串指令														    
/* LODS LODSB LODSW LODSD 例子	
/*  运行结果:														    
/*	bcdef
/*	g1
/*	2345
/************************************************************************/
int main(int argc, char* argv[])
{

	char	s[33] = "abcdefg123456789";
	char	lodsb_chars[ 10 ] = {0};
	char	ret[ 10 ]	= {0};
	short	vWORD		= 0;	// 备用载入 字 数据
	int		vDWORD		= 0;	// 备用载入 双字 数据

	__asm {
		xor eax,eax // 清空eax
		lea esi, s  // esi 指向数据 s

		mov ecx, 2 // 执行两次 lodsb
		// 载入串指令: LODSB、LODSW、LODSD ;将 ESI 指向的数据载入到 AL/AX/EAX, 执行后 ESI 自动变化
		rep lodsb // mov al byte ptr [esi]; esi = esi + sizeof( byte );  
		
		// 数据载入到al中
		mov lodsb_chars[ 0 ], al  // b
		
		lodsb 
		mov lodsb_chars[ 1 ], al  // c
		
		lodsb 
		mov lodsb_chars[ 2 ], al  // d
		
		lodsb 
		mov lodsb_chars[ 3 ], al  // e
		
		lodsb 
		mov lodsb_chars[ 4 ], al  // f
		
		lodsw // 载入串 字 指令
		mov vWORD,ax			  // g1
		
		lodsd // 载入串 双字 指令
		mov vDWORD,eax			  // 2345
	}
	
	printf( "%s\r\n", lodsb_chars );
	
	strncpy( ret, (char*) &vWORD, 2 ); // 将字符串 ps 中 2 个字符复制到字符串 ret 中。
	printf( "%s\r\n", ret );
	
	strncpy( ret, ( char* ) &vDWORD, 4 ); // 将字符串 ps 中 4 个字符复制到字符串 ret 中。
	printf( "%s\r\n", ret );

	getchar();
	return 0;
}



已有 0 人发表留言,猛击->>这里<<-参与讨论


ITeye推荐



posted on 2013-10-16 11:15  qwop  阅读(517)  评论(0编辑  收藏  举报