intel32汇编
朝向高处的旅途
0101
展开
-
;递归求和;递归计算阶乘
;递归求和 INCLUDE Irvine32.inc .code main PROC mov ecx,5 mov eax,0 call CalcSumL1: call WriteDec call Crlf exitmain ENDP;------------------------------------------------------CalcSum PROC;C原创 2014-11-07 18:07:03 · 1266 阅读 · 1 评论 -
整数求和程序的流程设计和实现
流程设计如下:TITLE Integer Summation Program ;This program prompts the user for three integers;stores them in an array,calculates the sum of the;array,and displays the sumINCLUDE Irvine32.inc原创 2014-11-06 19:32:11 · 906 阅读 · 0 评论 -
常用操作对cpu标志位的影响
AND,OR,XOR 指令总是清楚溢出标志和进位标志,它依据目的操作数的值修改该符号标志、零标志和奇偶标志。NOT 不影响任何标志TEST不修改目的操作数,其他与AND相同CMP 对目的操作数进行假减法 修改 溢出标志 符号标志 零标志 进位标志 辅助进位表示 和 奇偶标志stc可以设置进位标志 clc清楚进位标志原创 2014-11-06 20:13:51 · 848 阅读 · 0 评论 -
;以表格驱动分支选择
;以表格驱动分支选择;This program contains a table with offsets of procedures;it uses the table to execute indiret procedure callsINCLUDE Irvine32.inc.dataCaseTable BYTE 'A' ;查找值 DWORD Process_A原创 2014-11-07 16:06:55 · 523 阅读 · 0 评论 -
伪指令 LOCAL ENTER LEAVE
伪指令ENTERENTER指令自动为被调用过程创建堆栈框架,为局部变量保留堆栈空间并在堆栈空间上保存EBP执行动作为:1.在堆栈上压入ebp2.把ebp设为堆栈的基指针3.为局部变量保留空间 格式: ENTER numbytes,nestingleveleg: MySub PROC enter 8,0等价于MySub PROC原创 2014-11-07 17:44:10 · 892 阅读 · 0 评论 -
;ArrayFill 使用16位的随机整数序列填充一个数组
;ArrayFill 使用16位的随机整数序列填充一个数组;该过程接收两个参数 第一个参数是数组的偏移 第二个参数指示数组长度的整数;第一个参数通过传递引用方式传递,第二个参数通过传值方式传递.datacount=100array WORD count DUP(?).codepush OFFSET arraypush COUNTcall ArrayFillArrayF原创 2014-11-07 16:55:45 · 848 阅读 · 0 评论 -
;lea 返回间接操作数的偏移地址
;;;void makeArray();{; char myString[30];; for(int i=0;i<30;i++); myString[i]='*';;};;----------------------------------------------------;lea 返回间接操作数的偏移地址;;makeArray PROC push ebp原创 2014-11-07 17:00:48 · 738 阅读 · 0 评论 -
INVOKE ADDR PROC PROTO
INVOKE ADDR PROC PROTOINVOKE 过程名[,参数列表]eg: push TYPE array push LENGTHOF array push OFFSET array call DumpArray 等价于: INVOKE DumpArray,OFFSET array,LENGTHOF array,TYPE arrayADDRADDR操作符原创 2014-11-07 19:04:15 · 820 阅读 · 0 评论 -
Str_compare proc Str_length PROC Str_copy PROC
;Str_CompareINVOKE Str_compare,ADDR string1,ADDR string2Str_compare PROC uses eax edx esi edi, string1:ptr byte string2:ptr byte;;compare two strings;return nothing,but the zero and carry fla原创 2014-11-08 14:12:16 · 696 阅读 · 0 评论 -
一个编写过程的例子 ArraySum PROC
;TITLE INCLUDE Irvine32.inc.dataarray DWORD 10000h,20000h,30000h,40000h,50000htheSum DWORD ?.codemain PROC mov esi,OFFSET array mov ecx,LENGTHOF array call ArraySum mov theSum,eax exitma原创 2014-11-06 18:57:55 · 484 阅读 · 0 评论 -
Test #2:Random
TITLE LINK LIBRARY Test #2(TestLib2.asm);测试Irvine32.inc 链接库中的随机数生成过程INCLUDE Irvine32.incTAB=9.codemain PROC call Randomize ;初始化随机数发生器 call Rand1 call Rand2 exitmain ENDPRand1 PROC ;原创 2014-11-06 17:16:39 · 464 阅读 · 0 评论 -
Swap Procedure Example
;TITLE Swap Procedure ExampleINCLUDE Irvine32.incSwap PROTO,pValX:PTR DWORD,pValY:PTR DWORD.dataArray DWORD 10000h,20000h.codemain PROC ;Display the array before exchange mov esi,OFFSET Ar原创 2014-11-07 19:39:16 · 520 阅读 · 0 评论 -
Comparing Strings
TITLE Comparing StringsINCLUDE Irvine32.inc.datasource BYTE "MARTIN "dest BYTE "MARTINEZ"str1 BYTE "Source is smaller",0dh,0ah,0str2 BYTE "Source is not smaller",0ah,0dh,0.codemain P原创 2014-11-08 13:43:02 · 688 阅读 · 0 评论 -
;复制字符串
;复制字符串TITLE COPY A STRING.datasource BYTE "this is the source string",0target BYTE SIZEOF source DUP(0),0.CODEmain PROC mov esi,0 mov ecx,SIZEOF sources: mov al,source[esi] mov target[esi]原创 2014-11-06 09:18:12 · 403 阅读 · 0 评论 -
CPU 是如何检测溢出的
CPU 是如何检测溢出的在加法和减法运算完成后,运算结果的最高有效位向高位的进位值(也就是CF)与到最高位有效位的进位制异或,其结果放到溢出标志中。例如8位二进制数1000 0000 和1111 1110 相加,第六位向最高有效位(第七位无进位),但第七位向高位有进位(CF=1)这里都是补码:1000 00001111 1111-------------原创 2014-11-05 20:46:58 · 2145 阅读 · 0 评论 -
;整数数组求和
;整数数组求和TITLE SUMMING AN ARRAYINCLUDE Irvine32.inc.dataintarray WORD 100H,200H,300H,400H.codemain PROC mov esi,offset intarry mov ecx,LENGTHOF intarry mov ax,0s: add ax,[esi] add esi,TYPE原创 2014-11-06 09:12:00 · 528 阅读 · 0 评论 -
test #1: Integer I/O
TITLE Library test #1: Integer I/O;tests the Clrscr,Crlf,DumpMem,ReadInt,;SetTextColor,WaitMsg,WriteBin,WriteHex;and WriteString proceduresINCLUDE Irvine32.inc.dataarrayD DWORD 1000h,2000h,3000原创 2014-11-06 16:46:02 · 558 阅读 · 0 评论 -
;TITLE Reversing a String
;TITLE Reversing a StringINCLUDE Irvine32.inc.dataaName BYTE "Abraham Lincoln",0nameSize=($-aName) -1.codemain PROC;----push aName mov ecx,nameSize mov esi,0L1: movzx eax,aName[esi] p原创 2014-11-06 18:35:46 · 458 阅读 · 0 评论 -
Test #3:性能度量
TITLE LINK LIBRARY Test #3:性能度量;计算执行嵌套循环用去的时间INCLUDE Irvine32.incOUTER_LOOP_COUNT=3.datastartTime DWORD ?msg1 BYTE "Please wait...",0dh,0ah,0msg2 BYTE "Elapsed milliseconds:",0.codemai原创 2014-11-06 18:07:58 · 447 阅读 · 0 评论 -
windows 控制台下运行cl.exe
前提:确保已经安装vc6或者vs系列我们可以再命令行直接编译c++程序在windows操作系统中,打开命令行,输入cl,若系统提示'cl' 不是内部或外部命令,也不是可运行的程序或批处理文件。则说明VS没有安装或者环境变量设置不正确,可以按照如下步骤设置:1. 确保已经安装VS,并在控制台 中键入set 检查是否有类似如下格式的环境变量VSXXCOMNTOOL转载 2015-10-08 19:35:29 · 711 阅读 · 0 评论