汇编小程序.docx

上传人:b****1 文档编号:14681729 上传时间:2023-06-26 格式:DOCX 页数:14 大小:16.48KB
下载 相关 举报
汇编小程序.docx_第1页
第1页 / 共14页
汇编小程序.docx_第2页
第2页 / 共14页
汇编小程序.docx_第3页
第3页 / 共14页
汇编小程序.docx_第4页
第4页 / 共14页
汇编小程序.docx_第5页
第5页 / 共14页
汇编小程序.docx_第6页
第6页 / 共14页
汇编小程序.docx_第7页
第7页 / 共14页
汇编小程序.docx_第8页
第8页 / 共14页
汇编小程序.docx_第9页
第9页 / 共14页
汇编小程序.docx_第10页
第10页 / 共14页
汇编小程序.docx_第11页
第11页 / 共14页
汇编小程序.docx_第12页
第12页 / 共14页
汇编小程序.docx_第13页
第13页 / 共14页
汇编小程序.docx_第14页
第14页 / 共14页
亲,该文档总共14页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

汇编小程序.docx

《汇编小程序.docx》由会员分享,可在线阅读,更多相关《汇编小程序.docx(14页珍藏版)》请在冰点文库上搜索。

汇编小程序.docx

汇编小程序

[movsx的小例子]

TITLEqksb

;Author:

TT

;CreationDate:

2012/07/05

;Revisions:

1.0

INCLUDEIrvine32.inc

dataSEGMENT

dataENDS

.code

mainPROC

movbx,0A69Bh

movsxeax,bx;EAX=FFFFA69Bh

callDumpRegs

exit

mainENDP

ENDmain

[movzx的小例子]

TITLEqksb

;Author:

TT

;CreationDate:

2012/07/05

;Revisions:

1.0

INCLUDEIrvine32.inc

dataSEGMENT

val1byte1

dataENDS

.code

mainPROC

moveax,0

movzxeax,val1;这里不能直接用mov指令,因为eax是32位而val1是8位的~

callDumpRegs

exit

mainENDP

ENDmain

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

TITLEqksb

;Author:

TT

;CreationDate:

2012/07/05

;Revisions:

1.0

INCLUDEIrvine32.inc

dataSEGMENT

charbyte?

dataENDS

.code

mainPROC

moveax,0

callreadchar

movchar,al

callwritechar

exit

mainENDP

ENDmain

[N皇后问题]

TitleNqueen

includelibuser32.lib

includelibkernel32.lib

includelibIrvine32.lib

includeIrvine32.inc

.data

getsizeBYTE"输入N(正整数):

",0

nosolutionBYTE"没有解决方法",0

spaceBYTE"",0

thesizeBYTE?

solutionnumBYTE0

compareBYTE0

queenBYTE50dup(0)

 

.code

chargelinePROC,i:

BYTE,j:

BYTE

LOCALk:

BYTE

movesi,OFFSETqueen

movcompare,0

moval,i

movk,al

inck;

movzxeax,k

.REPEAT

moval,[esi]

.IFal==j

movcompare,1

.endif

incesi

deck

moval,k

.UNTILal==1

ret

chargelineENDP

charge1PROC,i:

BYTE,j:

BYTE

LOCALk:

BYTE

LOCALkk:

BYTE

movesi,OFFSETqueen

movcompare,0

movkk,1

moval,i

movk,al

inck

movzxeax,k

.REPEAT

moval,[esi]

subal,j

addal,i

subal,kk

.IFal==0

movcompare,1

.endif

incesi

inckk

deck

moval,k

.UNTILal==1

ret

charge1ENDP

charge2PROC,i:

BYTE,j:

BYTE

LOCALk:

BYTE

LOCALkk:

BYTE

movesi,OFFSETqueen

movcompare,0

movkk,1

moval,i

movk,al

inck

movzxeax,k

.REPEAT

moval,[esi]

subal,j

subal,i

addal,kk

.IFal==0

movcompare,1

.endif

incesi

inckk

deck

moval,k

.UNTILal==1

ret

charge2ENDP

 

placePROC,row:

BYTE,j:

BYTE

movesi,OFFSETqueen

movzxeax,row

addesi,eax

decesi

moval,j

mov[esi],al

ret

placeendp

 

printPROC

LOCALk:

BYTE

movzxecx,thesize

movk,1

movesi,OFFSETqueen

L2:

movzxeax,k

callWriteDec

movedx,OFFSETspace

callWriteString

moval,[esi]

callWriteDec

callCrlf

incesi

inck

loopL2

callCrlf

ret

printENDP

 

trychessPROC,row:

BYTE

LOCALj:

BYTE

movj,1

movzxecx,thesize

.REPEAT

INVOKEchargeline,row,j

moval,compare

cmpal,1

jzL1

INVOKEcharge1,row,j

moval,compare

cmpal,1

jzL1

INVOKEcharge2,row,j

moval,compare

cmpal,1

jzL1

INVOKEplace,row,j

moval,thesize

.IFal==row

incsolutionnum

INVOKEprint

exit

.ELSE

incrow

INVOKEtrychess,row

decrow

.endif

L1:

incj

moval,j

.UNTILal>thesize

RET

trychessENDP

 

mainPROC

movedx,OFFSETgetsize

callWriteString

callReadInt

movthesize,al

callCrlf

INVOKEtrychess,1

moval,solutionnum

.IFal==0

movedx,OFFSETnosolution

callWriteString

.endif

exit

mainENDP

ENDmain

[加法的例子]

TITLEqksb

;Author:

TT

;CreationDate:

2012/07/05

;Revisions:

1.0

INCLUDEIrvine32.inc

dataSEGMENT

val1DWORD10000h

val2DWORD40000h

val3DWORD20000h

finalvalDWORD?

dataENDS

.code

mainPROC

callClrscr

moveax,val1

addeax,val2

subeax,val3

callwriteint;这个指令会将数用10进制输出,如何用16进制还不知道…

calldelay;这个就是实现时间延迟咯~

exit

mainENDP

ENDmain

[生成随机数]

TITLEqksb

;Author:

TT

;CreationDate:

2012/07/09

;Revisions:

1.0

INCLUDEIrvine32.inc

dataSEGMENT

dataENDS

.code

mainPROC

callrandomize

movecx,10

L1:

moveax,10

callrandomrange

callwritedec

callcrlf

loopL1

callwaitmsg

exit

mainENDP

ENDmain

[输出整数的例子]

TITLEqksb

;Author:

TT

;CreationDate:

2012/07/03

;Revisions:

1.0

INCLUDEIrvine32.inc

dataSEGMENT

str1BYTE'mynameistutu$','$'

dataENDS

.code

mainPROC

moveax,5;

addeax,4;

callwriteint;最后以十进制数输出~

exit

mainENDP

ENDmain

[输出字符串的例子]

TITLEqksb

;Author:

TT

;CreationDate:

2012/07/03

;Revisions:

1.0

INCLUDEIrvine32.inc

dataSEGMENT

str1byte'姓名:

涂李傲',0

str2byte'学号:

2010013234',0

str3byte'班级:

软01',0

str4byte'性别:

男',0

dataENDS

.code

mainPROC

movedx,offsetstr1

callwritestring

callCrlf

movedx,offsetstr2

callwritestring

callCrlf

movedx,offsetstr3

callwritestring

callCrlf

exit

mainENDP

ENDmain

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

TITLEqksb

;Author:

TT

;CreationDate:

2012/07/05

;Revisions:

1.0

INCLUDEIrvine32.inc

dataSEGMENT

hehebyte"请输入一个整数:

",0

cundword?

dataENDS

.code

mainPROC

;提示用户输入一个整数

movedx,offsethehe

callwritestring

callreadint

movcun,eax

;用十进制显示

callcrlf

callwriteint

callcrlf

callwritedec

;用十六进制显示

callcrlf

callwritehex

;用二进制显示

callcrlf

callwritebin

;现在停下~

callcrlf

callwaitmsg

exit

mainENDP

ENDmain

[整数数组求和的例子]

TITLEqksb

;Author:

TT

;CreationDate:

2012/07/05

;Revisions:

1.0

INCLUDEIrvine32.inc

dataSEGMENT

intarrayword100h,200h,300h,400h

dataENDS

.code

mainPROC

movedi,offsetintarray;这个就是间接寻址数了~

movecx,lengthofintarray;循环计数器

movax,0;累加计数器清零~

L1:

addax,[edi]

addedi,typeintarray

loopL1

callDumpRegs;

exit

mainENDP

ENDmain

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

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 高等教育 > 艺术

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2