汇编小程序

更新时间:2023-11-04 21:28:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

[movsx的小例子]

TITLE qksb

; Author: TT

; Creation Date: 2012/07/05 ; Revisions: 1.0

INCLUDE Irvine32.inc data SEGMENT data ENDS .code main PROC mov bx,0A69Bh

movsxeax,bx ;EAX=FFFFA69Bh callDumpRegs exit main ENDP END main

[movzx的小例子]

TITLE qksb

; Author: TT

; Creation Date: 2012/07/05 ; Revisions: 1.0

INCLUDE Irvine32.inc data SEGMENT val1 byte 1 data ENDS .code main PROC mov eax,0

movzx eax,val1 ;这里不能直接用mov指令,因为eax是32位而val1是8位的~ call DumpRegs exit main ENDP END main

[从控制台读一个字符然后输出]

TITLE qksb

; Author: TT

; Creation Date: 2012/07/05 ; Revisions: 1.0

INCLUDE Irvine32.inc data SEGMENT char byte ? data ENDS .code main PROC mov eax,0 callreadchar movchar,al call writechar exit main ENDP END main

[N皇后问题]

Title Nqueen

includelib user32.lib includelib kernel32.lib includelib Irvine32.lib include Irvine32.inc .data

getsize BYTE \输入N(正整数): \nosolution BYTE \没有解决方法\space BYTE \thesize BYTE ? solutionnum BYTE 0 queen BYTE 50 dup(0) .code

chargelinePROC,i:BYTE,j:BYTE LOCAL k:BYTE

compare BYTE 0

movesi, OFFSET queen mov compare,0 moval,i movk,al inc k; movzxeax,k .REPEAT mov al,[esi] .IF al == j mov compare,1 .endif incesi dec k moval,k .UNTIL al == 1 ret

chargeline ENDP

charge1PROC,i:BYTE,j:BYTE LOCAL k:BYTE LOCAL kk:BYTE movesi, OFFSET queen

mov compare,0 mov kk,1 moval,i movk,al inc k movzxeax,k .REPEAT mov al,[esi] subal,j addal,i subal,kk .IF al == 0 mov compare,1 .endif incesi inckk dec k moval,k .UNTIL al == 1 ret charge1 ENDP

charge2PROC,i:BYTE,j:BYTE LOCAL k:BYTE LOCAL kk:BYTE movesi, OFFSET queen mov compare,0 mov kk,1 moval,i movk,al inc k movzxeax,k .REPEAT mov al,[esi] subal,j subal,i addal,kk .IF al == 0 mov compare,1 .endif incesi inckk dec k moval,k

.UNTIL al == 1 ret charge2 ENDP

placePROC,row:BYTE,j:BYTE movesi,OFFSET queen movzxeax,row addesi,eax decesi moval,j mov [esi],al ret placeendp

print PROC LOCAL k:BYTE movzxecx,thesize mov k,1

movesi,OFFSET queen L2:

movzxeax,k callWriteDec

movedx, OFFSET space callWriteString mov al,[esi] callWriteDec callCrlf incesi inc k loop L2 callCrlf ret print ENDP

trychessPROC,row:BYTE LOCAL j:BYTE mov j,1

movzxecx,thesize .REPEAT

INVOKE chargeline,row,j moval,compare

cmp al,1 jz L1

INVOKE charge1,row,j mov al,compare cmp al,1 jz L1

INVOKE charge2,row,j mov al,compare cmp al,1 jz L1

INVOKE place,row,j mov al,thesize .IF al == row inc solutionnum INVOKE print exit .ELSE inc row

INVOKE trychess,row dec row .endif L1:

inc j mov al,j

.UNTIL al > thesize RET trychess ENDP

main PROC

movedx,OFFSETgetsize call WriteString callReadInt movthesize,al callCrlf

INVOKE trychess,1 moval,solutionnum .IF al == 0

movedx,OFFSETnosolution callWriteString .endif exit main ENDP END main

[加法的例子]

TITLE qksb

; Author: TT

; Creation Date: 2012/07/05 ; Revisions: 1.0

INCLUDE Irvine32.inc data SEGMENT val1 DWORD 10000h val2 DWORD 40000h val3 DWORD 20000h finalval DWORD ? data ENDS .code main PROC callClrscr mov eax,val1 add eax,val2 sub eax,val3

call writeint ;这个指令会将数用10进制输出,

如何用16进制还不知道…

call delay ;这个就是实现时间延迟咯~ exit main ENDP END main

[生成随机数]

TITLE qksb

; Author: TT

; Creation Date: 2012/07/09 ; Revisions: 1.0

INCLUDE Irvine32.inc data SEGMENT data ENDS .code main PROC call randomize mov ecx,10 L1:

mov eax,10 callrandomrange callwritedec callcrlf loop L1 callwaitmsg exit main ENDP END main

[输出整数的例子]

TITLE qksb

; Author: TT

; Creation Date: 2012/07/03 ; Revisions: 1.0

INCLUDE Irvine32.inc data SEGMENT

str1 BYTE 'my name is tutu$','$' data ENDS .code

main PROC moveax , 5; addeax , 4;

call writeint ;最后以十进制数输出~ exit main ENDP

END main

[输出字符串的例子]

TITLE qksb

; Author: TT

; Creation Date: 2012/07/03 ; Revisions: 1.0

INCLUDE Irvine32.inc data SEGMENT

str1 byte '姓名:涂李傲',0 str2 byte '学号:2010013234',0 str3 byte '班级:软01',0 str4 byte '性别:男',0

data ENDS .code main PROC

movedx,offset str1 call writestring callCrlf

movedx,offset str2 callwritestring callCrlf

movedx,offset str3 callwritestring callCrlf exit main ENDP

END main

用户输入一个东西然后用2进制,10进制和16进制

输出

TITLE qksb

; Author: TT

; Creation Date: 2012/07/05 ; Revisions: 1.0

INCLUDE Irvine32.inc data SEGMENT

hehe byte \请输入一个整数: cundword ? data ENDS .code main PROC

;提示用户输入一个整数 movedx,offsethehe callwritestring call readint mov cun,eax ;用十进制显示 call crlf call writeint call crlf

\ call writedec ;用十六进制显示 call crlf call writehex ;用二进制显示 call crlf call writebin ;现在停下~ call crlf call waitmsg exit main ENDP END main

[整数数组求和的例子]

TITLE qksb

; Author: TT

; Creation Date: 2012/07/05 ; Revisions: 1.0

INCLUDE Irvine32.inc

data SEGMENT

intarray word 100h,200h,300h,400h data ENDS .code main PROC

mov edi,offset intarray ;这个就是间接寻址数了~

mov ecx,lengthof intarray ;循环计数器 mov ax,0 ;累加计数器清零~ L1:

add ax,[edi]

add edi,type intarray loop L1

call DumpRegs ; exit main ENDP END main

显示的结果是EAX=770E0A00,后面4位是0A00=100+200+300+400所以是正确的!

本文来源:https://www.bwwdw.com/article/69a2.html

Top