汇编入门1:变量定义,四则运算

汇编程序的编写与高级语言的不一样,就在于有不少寄存器级别的运算,代码中al、bl实际上是2个寄存器,就至关于一个定义好的全局变量,并且在进行某些操做以后,寄存器会被清空,这是编写程序的时候须要注意的。为了方便演示,咱们直接将结果简化为对应ascii码的数字,方便显示。初始运算变量dst中30h表明16进制,也就是16*3=48,第一个加法程序中咱们计算dst + 7,也就是48+7=55,意味着ascii码中对应的数字7。最终输出结果为7证实了咱们的计算是对的。去掉了繁琐的数字转换,回归最淳朴的汇编计算,能够更深刻地理解本质。python

代码为:编程

.386
.model flat, stdcall
option casemap :none
include windows.inc
include kernel32.inc
include masm32.inc
includelib kernel32.lib
includelib masm32.lib

.data
; ============= 数据定义部分 ======================
; 定义一个叫作HelloWorld的变量,变量类型是db?变量内存储hello world字符串,并以结束符0结尾
HelloWorld db "Hello World!", 0 
; 定义一个叫作buffer的db类型
buffer     db 31h,32h,33h,34h,35h,36h,37h,38h,0
dst        db 30h
enter1     db 0ah,0 ; 定义一个换行符并以回车结尾
tmp        db 0

.code
; ============= 代码部分 ==========================
main PROC
mov al, dst
ADD al, 7
mov tmp, al
invoke StdOut,addr tmp
invoke StdOut,addr enter1

mov al, dst
ADD al, 7
SUB al, 4
mov tmp, al ; tmp = al且清空al,此时再对al做任何运算都是无效的?
invoke StdOut,addr tmp
invoke StdOut,addr enter1
; ----------------------------------
; 25和2小于255,能够作8位乘法,程序以下。
mov al,2    ; al = 2 (其中al为低位寄存器,至关于临时内存空间)
mov bl,25   ; bl = 25
mul bl      ; al = al * bl (al变化了,bl没变)
mov tmp, al ; tmp = al ----> 要移出寄存器才能读取乘完后获得的结果
invoke StdOut,addr tmp
invoke StdOut,addr enter1

; ----------------------------------
mov al, 112 ; al = 112
mov bl, 2   ; bl = 2
div bl      ; al = al / bl ---> 112 / 2 = 56 -----> ascii里的数字8
mov tmp, al ; tmp = al 且清空al -------> 要移出寄存器才能读取乘完后获得的结果
invoke StdOut,addr tmp
invoke StdOut,addr enter1

invoke StdOut, addr HelloWorld
invoke StdOut,addr enter1

invoke StdOut,addr buffer
invoke StdOut,addr enter1
invoke StdIn, addr buffer, sizeof buffer
invoke StdOut,addr buffer
invoke ExitProcess, 0 
main ENDP  
END main

输出结果为windows

7
3
2
8
Hello World!
12345678
相关文章
相关标签/搜索