view pdf in windows form c# : Add a link to a pdf application software tool html windows winforms online win32asm_tutorial2-part1230

Win32Asm Tutorial
prev7- Conditional jumpsnext
7.0 - Conditional Jumps
In the code section, you can also use labels like this:
.code
mov eax, edx
sub eax, ecx
cmp eax, 2
jz loc1
xor eax, eax
jmp loc2
loc1:
xor eax, eax
inc eax
loc2:
(xor eax, eax means: eax = 0.)
Let's examine the code:
mov eax, edx : put edx in eax
sub eax, ecx : substract ecx from eax
cmp eax, 2
This is a new instruction: 
cmp
Cmp
stands for compare. It can compare two values (reg, mem, imm)
and sets the Z-flag (zeroflag) if they are equal. The zero-flag is, like the carry, also a bit in the internal
flag register.
jz loc1
This one is also new. It is a conditional jump. 
Jz 
= jump if zero. I.e. jump if the zero flag is set. Loc1
is a label for the offset in memory where the instructions '
xor eax, eax | inc eax
' begin. So 
jz
loc1
= jump to the instruction at loc1 if the zero flag is set.
cmp eax, 2 : set zero flag if eax=2
jz loc1 : jump if zero flag is set
=
Jump to the instructions at loc1 if eax is equal to 2
Then there's a 
jmp loc2
. This also is a jump, but an unconditional jump: it always jumps. What the
code above exactly does is:
if ((edx-ecx)==2)
{
eax = 1;
}
else
{
eax = 0;
}
or the BASIC version:
IF (edx-ecx)=2 THEN
EAX = 1
ELSE
Win32Asm Tutorial
Converted by Atop CHM to PDF Converter free version!
http://www.chmconverter.com
21 / 53
Add a link to a pdf - insert, remove PDF links in C#.net, ASP.NET, MVC, Ajax, WinForms, WPF
Free C# example code is offered for users to edit PDF document hyperlink (url), like inserting and deleting
adding an email link to a pdf; adding hyperlinks to a pdf
Add a link to a pdf - VB.NET PDF url edit library: insert, remove PDF links in vb.net, ASP.NET, MVC, Ajax, WinForms, WPF
Help to Insert a Hyperlink to Specified PDF Document Page
accessible links in pdf; add links in pdf
EAX = 0
END IF
7.1 - Flag register
The flag register has a set of flags which are set or unset depending on calculations or other events. I
won't discuss all of them, only a few are important:
ZF (Zero flag)
This flag is set when the result of a calculation is zero (compare is actually a substraction without
saving the results, but setting the flags only).
SF (Sign flag)
If set, the resulting number of a calculation is negative.
CF (Carry flag)
The carry flag contains the left-most bit after calculations.
OF (Overflow flag)
Indicates an overflow of a calculation, i.e. the result does not fit in the destination.
There are more flags (Parity, Auxiliary, Trap, Interrupt, Direction, IOPL, Nested Task, Resume, &
Virtual Mode) but as we won't use them I don't explain them.
7.2 - The jump serie
There is a whole serie of conditional jumps, and they all jump depending on the state of the flag. But
as most jumps have clear names, you don't even have to know which flag has to be set. 
"Jump if
greater or equal"
(jge) for example is the same as "
Sign flag = Overflow flag"
, and
"Jump if zero
" is the same as 
"Jump if Zero flag = 1"
.
In the table below, 'meaning' indicates what the outcome of a calculation should be to jump. "Jump if
above" means:
cmp x, y
jump if x is above y
Opcode
Meaning
Condition
JA
Jump if above
CF=0 & ZF=0
JAE
Jump if above or equal
CF=0
JB
Jump if below
CF=1
JBE
Jump if below or equal
CF=1 or ZF=1
JC
Jump if carry
CF=1
JCXZ
Jump if CX=0
register CX=0
JE (is the same as
JZ)
Jump if equal
ZF=1
JG
Jump if greater (signed)
ZF=0 & SF=OF
JGE
Jump if greater or equal (signed)
SF=OF
JL
Jump if less (signed)
SF != OF
JLE
Jump if less or equal (signed)
ZF=1 or SF!=OF
JMP
Unconditional Jump
-
JNA
Jump if not above
CF=1 or ZF=1
JNAE
Jump if not above or equal
CF=1
JNB
Jump if not below
CF=0
JNBE
Jump if not below or equal
CF=1 & ZF=0
JNC
Jump if not carry
CF=0
JNE
Jump if not equal
ZF=0
JNG
Jump if not greater (signed)
ZF=1 or SF!=OF
Win32Asm Tutorial
Converted by Atop CHM to PDF Converter free version!
http://www.chmconverter.com
22 / 53
RasterEdge .NET Document Imaging Trial Package Download Link.
Extract; C# Read: PDF Image Extract; C# Write: Insert text into PDF; C# Write: Add Image to PDF; C# Protect: Add Password to PDF; C#
add hyperlink pdf document; add hyperlink to pdf acrobat
C# PDF Library SDK to view, edit, convert, process PDF file for C#
editing PDF document hyperlink (url) and quick navigation link in PDF bookmark. C#.NET: Edit PDF Metadata. PDF SDK for .NET allows you to read, add, edit, update
add links to pdf file; add a link to a pdf file
JNGE
Jump if not greater or equal (signed)SF!=OF
JNL
Jump if not less (signed)
SF=OF
JNLE
Jump if not less or equal (signed)
ZF=0 & SF=OF
JNO
Jump if not overflow (signed)
OF=0
JNP
Jump if no parity
PF=0
JNS
Jump if not signed (signed)
SF=0
JNZ
Jump if not zero
ZF=0
JO
Jump if overflow (signed)
OF=1
JP
Jump if parity
PF=1
JPE
Jump if parity even
PF=1
JPO
Jump if paity odd
PF=0
JS
Jump if signed (signed)
SF=1
JZ
Jump if zero
ZF=1
All jump instructions take one operand: an offset to jump to.
[top]
Win32Asm Tutorial
Converted by Atop CHM to PDF Converter free version!
http://www.chmconverter.com
23 / 53
C# PDF insert image Library: insert images into PDF in C#.net, ASP
C#.NET PDF SDK - Add Image to PDF Page in C#.NET. How to Insert & Add Image, Picture or Logo on PDF Page Using C#.NET. Add Image to PDF Page Using C#.NET.
clickable links in pdf from word; adding a link to a pdf in preview
VB.NET PDF insert image library: insert images into PDF in vb.net
VB.NET PDF - Add Image to PDF Page in VB.NET. Guide VB.NET Programmers How to Add Images in PDF Document Using XDoc.PDF SDK for VB.NET.
pdf link open in new window; add hyperlink pdf file
Win32Asm Tutorial
prev8- Something about numbersnext
8.0 - Something about numbers
Using integer or floating point numbers in most programming languages just depends on the
declaration of variables. In assembler these are completly different. Floating point calculations are
done with a special opcode-set, by a FPU co-processor (floating point unit). Floating point
instructions will be discussed later. First something about integers. In C language, there are signed
and unsigned numbers. Signed just means that the number has a sign (+ or -), unsigned is always
positive. Look at the table below to see the difference (again, this is a byte-example, it works the
same for other sizes):
Value
00 01 02 03 ... 7F 80 ... FC FD FE FF
Unsigned
meaning
00 01 02 03 ... 7F 80 ... FC FD FE FF
Signed meaning
00 01 02 03 ... 7F -80 ... -04 -03 -02 -01
So with signed numbers, a byte is split in two ranges: 0 - 7F for positive values, 80 - FF for negative
values. For dword values, it works the same: 0 - 7FFFFFFFh positive, 80000000 - FFFFFFFFh negative.
As you might have noticed, negative numbers have the most significant bit set, because they are
greater that 80000000h. This bit is called the sign bit.
8.1 - Signed or unsigned?
Neither you or the processor can see if a value is singed or unsigned. The good news is that for
addition and substraction, it doesn't matter if the number is signed or unsigned:
Calculate: -4 + 9 
FFFFFFFC + 00000009 = 00000005. (which is correct)
Calculate 5 - (-9)
00000005 - FFFFFFF7 = 0000000E (which is correct, too ( 5 - -9 = 14)
The bad news is that this is not true for muliplication, division and compares. Therefore, there are
special mul and div opcodes for signed numbers:
imul
and 
idiv
Imul also has an advantages over mul because it can take immediate values:
imul src
imul src, immed 
imul dest,src, 8-bit immed
imul dest,src
idiv src
They are about the same as mul and div, but they calculate with signed values. Compares can be
used the same as with unsigned numbers, but the flags are set different. Therefore there are different
jump instructions for signed and unsigned numbers:
cmp ax, bx
ja somewhere
Ja is an unsigned jump. Jump if above. Imagine that ax = FFFFh (FFFFh unsigned, -1 signed) and bx =
0005h (5 unsigned, 5 signed). As FFFFh is a higher (unsigned) value than 0005, the ja-instruction will
jump. But if the jg instruction is used (which is a signed jump):
Win32Asm Tutorial
Converted by Atop CHM to PDF Converter free version!
http://www.chmconverter.com
24 / 53
VB.NET PDF Password Library: add, remove, edit PDF file password
VB: Add Password to PDF with Permission Settings Applied. This VB.NET example shows how to add PDF file password with access permission setting.
convert doc to pdf with hyperlinks; add links pdf document
C# PDF Password Library: add, remove, edit PDF file password in C#
C# Sample Code: Add Password to PDF with Permission Settings Applied in C#.NET. This example shows how to add PDF file password with access permission setting.
add links to pdf document; pdf link to specific page
cmp ax, bx
jg somewhere
The jg-instruction won't jump, because -1 is not greater that 5.
Just remember this:
A number is signed or unsigned depending on how you treat the number.
[top]
Win32Asm Tutorial
Converted by Atop CHM to PDF Converter free version!
http://www.chmconverter.com
25 / 53
How to C#: Basic SDK Concept of XDoc.PDF for .NET
You may add PDF document protection functionality into your C# of PDF document, including editing PDF url links and quick navigation link in bookmark
check links in pdf; add hyperlinks to pdf online
VB.NET PDF: Basic SDK Concept of XDoc.PDF
You may add PDF document protection functionality into your VB.NET of PDF document, including editing PDF url links and quick navigation link in bookmark
add page number to pdf hyperlink; pdf reader link
Win32Asm Tutorial
prev9- More opcodesnext
9.0 - More opcodes
Here are some more opcodes
TEST
Test performs a logical AND operation on the two operands (dest, src) and sets the flag register
according to the result. The result itself is not stored. Test is used to test for a bit in for example a
register:
test eax, 100b ; (b-suffix stands for binary)
jnz bitset
The jnz will jump if the 3rd bit from the right in eax is set. A very common use of test is to test if a
register is zero:
test ecx, ecx
jz somewhere
The jz jumps if ecx is zero.
STACK OPCODES
Before I will tell you about the stack opcodes, I will first explain what the stack is. The stack is a
place in memory, pointed to by the stack pointer register, 
esp
. The stack is a place to hold temporary
values. There are two instructions to put a value and get it again: 
push
and 
pop
. Push pushes a
value onto the stack, pop pops it off again. The value that was last put on the stack, goes first off. As
a value is placed on the stack, the stack pointer decreases, when it is removed, the stack pointer
increases. Look at this example:
(1) mov ecx, 100
(2) mov eax, 200
(3) push ecx ; save ecx
(4) push eax
(5) xor ecx, eax
(6) add ecx, 400
(7) mov edx, ecx
(8) pop ebx
(9) pop ecx
Explaination:
1: put 100 in ecx
2: put 200 in eax
3: push ecx (=100) onto the stack (first pushed)
4: push eax (=200) onto the stack (last pushed)
5/6/7: perform operation on ecx, value of ecx changes
8: pop ebx: ebx will become 200 (last pushed, first pop-ed)
9: pop ecx: ecx will become 100 again (first pushed, last pop-ed)
To indicate what happens in memory with this pushing and poping, look at the following figures:
Win32Asm Tutorial
Converted by Atop CHM to PDF Converter free version!
http://www.chmconverter.com
26 / 53
Offset1203120412051206120712081209120A120B
Value00 00 00 00 00 00 00 00 00
ESP 
(the stack is here initialy filled with zeroes, but in reality it is not like this. ESP indicates the offset that
ESP points to)
mov ax, 4560h
push ax
Offset1203120412051206120712081209120A120B
Value00 00 60 45 00 00 00 00 00
ESP 
mov cx, FFFFh
push cx
Offset1203120412051206120712081209120A120B
ValueFF FF 60 45 00 00 00 00 00
ESP 
pop edx
Offset1203120412051206120712081209120A120B
ValueFF FF 60 45 00 00 00 00 00
ESP 
edx is 4560FFFFh now.
CALL & RET
A call jumps to some code and returns as soon as it found a ret-instruction. You can see them as
functions or subs in other programming languages. Example:
..code..
call 0455659
..more code..
Code at 455659:
add eax, 500
mul eax, edx
ret
When the call instruction is executed, the processor jumps to the code at 455659, executes the
instructions until the ret, and then returns to the instruction after the call. The code the call jumps to
is called a procedure. You can put code that you use many times into a procedure and then use a call
each time you need it.
More into details: A call pushes the EIP (pointer to the next instruction that has to be executed) on
the stack, and the ret-instruction pops it off again and returns. You can also specify arguments for a
call. This is done by pushes:
push something
push something2
call procedure
Inside the call, the arguments can be read from the stack and used. Local variables, i.e. data that is
only needed within the procedure, are also stored on the stack. I won't go into details about this,
because it can be done very easily with masm and tasm. Just remember you can make procedures,
and that they can use parameters. One important note:
eax is almost always used to hold the return value of a procedure
Win32Asm Tutorial
Converted by Atop CHM to PDF Converter free version!
http://www.chmconverter.com
27 / 53
This is also true for windows functions. Of course you can use any other register in your own
procedure, but this is the standard.
[top] 
Win32Asm Tutorial
Converted by Atop CHM to PDF Converter free version!
http://www.chmconverter.com
28 / 53
Win32Asm Tutorial
prev10- The advantages of masmnext
10.0 - The advantages of masm
If you are not using masm, you can skip this section and try to convert all the examples, or read it
anyway and try to persuade yourself using masm. Of course this is your own choice. But masm
makes assembly language really easier.
10.1 - Comparison and loop construction
Masm has some pseudo-high level syntax to create compare- and loopconstructions easily:
.IF, .ELSE, .ELSEIF, .ENDIF
.REPEAT, .UNTIL
.WHILE, .ENDW, .BREAK
.CONTINUE
If
If you have any experience with programming languages (you should), you probably have seen
something like an if/else construction:
.IF eax==1
;eax is one
.ELSEIF eax=3
; eax is three
.ELSE
; eax is not one or three
.ENDIF
This construction is VERY useful. You don't have to mess with jumps, just an .IF statement (don't
forget the period before .IF and .ELSE etc.). Nested if's are allowed:
.IF eax==1
.IF ecx!=2
; eax= 1 and ecx is not 2
.ENDIF
.ENDIF
But this can be done easier:
.IF (eax==1 && ecx!=2)
; eax = 1 and ecx is not 2
.ENDIF
These are the operators you can use:
==
is equal to
!=
is not equal to
>
is greater than
<
is less than
>=
is greater than or equal to
<=
is less than to equal to
&
bit-test
!
logical NOT
&&
logical AND
Win32Asm Tutorial
Converted by Atop CHM to PDF Converter free version!
http://www.chmconverter.com
29 / 53
||
logical OR
CARRY?
carry bit set
OVERFLOW?overflow bit set
PARITY
parity bit set
SIGN?
sign bit set
ZERO?
zero bit set
Repeat
This statement executes a block until a condition is true:
.REPEAT
; code here
.UNTIL eax==1
This code repeats the code between repeat and until, until eax = 1.
While
The while is the inverse of the repeat function. It executes a block while a condition is true:
.WHILE eax==1
; code here
.ENDW
You can use the 
.BREAK
statement to 'break' out of the loop
.WHILE edx==1
inc eax
.IF eax==7
.BREAK
.ENDIF
.ENDW
If eax=7, the while-loop will stop.
The 
continue
instruction makes the repeat or while-block skip to the code that evaluates the
condition of the loop.
10.2 - Invoke
This is the biggest advantage over tasm and nasm. Invoke simplifies the use of procedures and calls.
Normal style:
push parameter3
push parameter2
push parameter1
call procedure
Invoke style:
invoke procedure, parameter1, parameter2, parameter3
The assembled code is exactly the same, but the invoke style is easier and more reliable. To use
invoke on a procedure, you'll have to define a prototype:
PROTO STDCALL testproc:DWORD, :DWORD, :DWORD
This declares a procedure, named testproc, that takes 3 DWORD-size parameters. Now if you do
this...
Win32Asm Tutorial
Converted by Atop CHM to PDF Converter free version!
http://www.chmconverter.com
30 / 53
Documents you may be interested
Documents you may be interested