深职院asm课程考试资料.docx
《深职院asm课程考试资料.docx》由会员分享,可在线阅读,更多相关《深职院asm课程考试资料.docx(36页珍藏版)》请在冰豆网上搜索。
深职院asm课程考试资料
///求负
.modelsmall
.386
.code
start:
movax,17eh
negax
movax,0
negax
.exit
endstart
//***************while循环****************
.modelsmall
.386
.datakdbbufbyte33h,38h,32h,0dh
tempword?
.stack20h
.code
start:
movax,@data
movDS,ax
pushbx
pushcx
pushdi
;
leadi,kdbbuf
movcx,10
movbx,0
;
readn:
moval,[di]
.repeat
incdi
subal,30h
pushax
movax,bx
mulcx
movbx,ax
popax
movah,0
addbx,ax
moval,[di]
.untilal<30h||al>39h
;
readend:
movtemp,bx
popdi
popcx
popbx
nop
.exit
endstart
//二进制转换ASCII
.modelsmall
.386
.data
ShuChubyte10hdup(0)
Tempword17Eh
.stack20h
.code
Start:
movax,@data
movDS,ax
;
movax,Temp
leadi,ShuChu
movcx,0
movbx,10
Loop1:
movdx,0
divbx
pushdx
inccx
orax,ax
jnzLoop1
;
Loop2:
popdx
adddl,30h
mov[di],dl
incdi
loopLoop2
;
.exit
endStart
///********显示helloword!
按回车退出********
.modelsmall
.386
.data
.stack10h
keybufbyte'h','e','l','l','o',20h,'w','o','r','d','!
'
.code
start:
movax,@data
movds,ax
leadi,keybuf
WaitInput:
moval,[di]
incdi
//显示字符
movah,06h
movdl,al
int21h
//
cmpal,'!
'
jneWaitInput
WaitInput2:
//读按键
movah,06h
movdl,0ffh
WaitInput3:
int21h
jzWaitInput3
//
movah,06h
movdl,al
int21h
cmpal,0dh
jexxx
jmpWaitInput2
xxx:
.exit
endstart
//**************声音*******************
880Hz=54B。
987.76Hz=4b7。
1046.5Hz=474。
1174.66Hz=3f7。
1318.51Hz=388。
1396.92Hz=356。
1567.98Hz=2f8。
1760Hz=2a5
.modelsmall
.386
.data
.stack10h
.code
start:
moval,0b6h
out43h,al
movcx,54bh
;//传送
moval,cl
out42h,al
moval,ch
out42h,al
;//打开扬声器
inal,61h
oral,3
out61h,al
;//延时
movecx,0fffffffh
delay:
loopddelay
;//关闭扬声器
inal,61h
andal,0fch
out61h,al
jmpstart
finished:
nop
.exit
endStart
//*******从键盘输入两个数,输出相加结果*****
.modelsmall
.386
.stack10h
.data
msg1byte'A','=',0dh
msg2byte'B','=',0dh
keybuf1byte10hdup(0)
keybuf2byte10hdup(0)
printbufbyte10hdup(0)
temp1word?
temp2word?
.code
start:
movax,@data
movds,ax
;==========显示msg1A=========
leasi,msg1
shownext:
movdl,[si]
cmpdl,0dh
jeinputdata
movah,06h
int21h
incsi
jmpshownext
;=======输入数据,显示数据,保存==
inputdata:
leadi,keybuf1
inputnext:
;输入;
movah,06h
movdl,0ffh
waitinput:
int21h
jzwaitinput
cmpal,0dh
jeinputend
;显示;
movdl,al
int21h
;保存;
mov[di],al
incdi
jmpinputnext
inputend:
mov[di],al
;========转换二进制========
leadi,keybuf1
movcx,10
movbx,0
readn:
moval,[di]
incdi
cmpal,30h
jbreadend
cmpal,39h
jareadend
subal,30h
pushax
movax,bx
mulcx
movbx,ax
popax
movah,0
addbx,ax
jmpreadn
;
readend:
movtemp1,bx
;============回车换行=========
movah,06h
movdl,0dh
int21h
movdl,0ah
int21h
;=========显示msg2B===========
leasi,msg2
shownext2:
movdl,[si]
cmpdl,0dh
jeinputdata2
movah,06h
int21h
incsi
jmpshownext2
;========输入数据,显示数据,保存=====
inputdata2:
leadi,keybuf2
inputnext2:
;输入;
movah,06h
movdl,0ffh
waitinput2:
int21h
jzwaitinput2
cmpal,0dh
jeinputend2
;显示;
movdl,al
int21h
;保存;
mov[di],al
incdi
jmpinputnext2
inputend2:
mov[di],al
;===========转换二进制===============
leadi,keybuf2
movcx,10
movbx,0
readn2:
moval,[di]
incdi
cmpal,30h
jbreadend2
cmpal,39h
jareadend2
subal,30h
pushax
movax,bx
mulcx
movbx,ax
popax
movah,0
addbx,ax
jmpreadn2
;
readend2:
movtemp2,bx
;=========回车换行==========
movah,06h
movdl,0dh
int21h
movdl,0ah
int21h
;==============相加=============
movax,temp1
movbx,temp2
addax,bx
;======二进制转十六进制========
leadi,printbuf
movcx,0
movbx,10
;
writen1:
movdx,0
divbx
pushdx
inccx
orax,ax
jnzwriten1
;
writen2:
popdx
adddl,30h
mov[di],dl
incdi
loopwriten2
movbyteptr[di],0dh
;===============显示结果
leasi,printbuf
shownext3:
movdl,[si]
cmpdl,0dh
jeJieshu
movah,06h
int21h
incsi
jmpshownext3
;
Jieshu:
nop
.exit
endStart
//******从CMOS读年月日,显示******
.modelsmall
.386
.stack10h
addrportequ70h
dataportequ71h
.data
datebyte00h,00h,00h
datebufbyte00h,00h,'-',00h,00h,'-',00h,00h,0dh
.code
start:
movax,@data
movds,ax
;=============将年月日读到date=========
movcx,3
leasi,date
inal,addrport
andal,80h
addal,9
readcoms:
outaddrport,al
;============延时==============
pushcx
movcx,0ffh
delay:
loopdelay
popcx
;============从dataport读数据到al=======
pushax
inal,dataport
mov[si],al
popax
decal
incsi
loopreadcoms
;===================将date的BCD码转为ASCII码,存入datebuf=====
movcx,3
leasi,date
leadi,datebuf
bcd2asc:
;=================BCD转ASCII=====
moval,[si]
movah,[si]
shral,4
andal,0fh
andah,0fh
addal,30h
addah,30h
mov[di],al
incdi
mov[di],ah
incsi
incdi
incdi
loopbcd2asc
;===============显示datebuf=======
leasi,datebuf
shownext:
movdl,[si]
cmpdl,0dh
jejieshu
movah,06h
int21h
incsi
jmpshownext
;=============等待按键结束========
movdl,0ffh
movah,06h
waitinput:
int21h
jzwaitinput
jieshu:
.exit
endstart
//**********连加*从1加到10======
.modelsmall
.386
.data
tempword?
.stack10h
.code
mainprocfar
movax,@data
movds,ax
movcx,10
movax,0
calllianjia
.exit
mainendp
lianjiaprocnear
addax,cx
looplianjia
movtemp,bx
ret
lianjiaendp
endmain
//*************IF语句*********
;判断键盘输入为1.2.3.4分别传送'A','B','C','D'.用高级语言
.modelsmall
.386
.stack10h
.code
start:
movax,@data
movds,ax
movdl,0ffh
movah,06h
waitinput:
int21h
jzwaitinput
.IFal=='1'
movah,'A'
.ELSEIFal=='2'
movah,'B'
.ELSEIFal=='3'
movah,'C'
.ELSEIFal=='4'
movah,'D'
.ELSE
movah,'E'
.ENDIF
.exit
endstart
//**********子程序调用IFHELLOWORD******
;子程序调用.IF.ELSEIF.ELSE.ENDIF显示shownext
.modelsmall
.386
.stack10h
.data
msg1byte'H','E','L','L','O','','W','O','R','L','D',0dh
.code
mainprocfar
movax,@data
movds,ax
leasi,msg1
callshowmsg
nop
.exit
mainendp
showmsgprocnearusessidxax
shownext:
movdl,[si]
.IFdl!
=0dh
movah,06h
int21h
incsi
jmpshownext
.ELSE
ret
.ENDIF
showmsgendp
.exit
endmain
//********.IF.ELSEIF.ELSEENDIF转换2bin
;1-8用子函数,.IF.ELSEIF.ELSE.ENDIFASCII转换2bin
.modelsmall
.386
.data
keybufbyte33h,38h,32h,0dh
tempword?
.stack30h
.code
mainprocfar
movax,@data
movds,ax
leadi,keybuf
callbin2ascii
mainendp
bin2asciiprocnearusesaxbxcx
movbx,0
movcx,10
DuShu:
moval,[di];di放入ax低8位
incdi
.IFal>=39h
movtemp,bx
ret
.ELSEIFal<=30h
movtemp,bx
ret
.ENDIF
subal,30h
pushax
movax,bx
mulcx;ax=ax*cx
movbx,ax
popax
movah,0
addbx,ax
jmpDuShu
ret
bin2asciiendp
endmain
;***************从1加到10*************
.modelsmall
.386
.data
tempword?
.stack10h
.code
start:
movax,@data
movds,ax
movcx,0
movax,0
.whilecx<=10
addax,cx
inccx
.endw
.exit
endstart
**************.break.continue*******
.modelsmall.386
.data
databufbyte13h,12h,'#',02h,'#',19h,0dh
.stack20h
.code
start:
movax,@data
movDS,ax
leadi,databuf
movbx,0
.while1
moval,[di]
incdi
.break.ifal==0dh
.continue.ifal=='#'
movah,0
addbx,ax
.endw
nop
.exit
endstart
//*********模块汇编****************
//c++
#include"stdafx.h"
#include"iostream"
usingnamespacestd;
extern"C"voiddecitohexa(int,char*);
charbuffer[35]="Enteranumberbetween0and9999:
";
charhexanum[5];
intdecinum=0;
voidmain(void)
{
cout<cin>>decinum;
cout<decitohexa(decinum,hexanum);
cout<<"thehexadecimalvalueof"<cout<cout<<"\n"<}
//asm文件
.386
.modelflat,c
.stack1024
.code
publicdecitohexa
decitohexaproccuseseaxediecxedxdecidata,hexadata:
ptr
xoreax,eax
moveax,decidata
shleax,16
movedi,hexadata
movecx,4
next:
movedx,eax
shleax,4
roledx,4
anddl,0fh
adddl,30h
cmpdl,39h
jbestoreasc
adddl,7
storeasc:
mov[edi],dl
incedi
loopnext
movbyteptr[edi],0
ret
decitohexaendp
end
//*****************内嵌汇编**************
//xm12_4.cpp:
Definestheentrypointfortheconsoleapplication.
//
#include"stdafx.h"
#include"iostream"
usingnamespacestd;
charbuffer[35]="Enteranumberbetween0and9999:
";
charhexanum[5];
intdecinum=0;
voiddecitohexa(intdecidata,char*hexadata)
{
__asm
{
xoreax,eax
moveax,decidata
shleax,16
movedi,hexadata
movecx,4
next:
movedx,eax
shleax,4
roledx,4
anddl,0fh
adddl,30h
cmpdl,39h
jbestoreasc
adddl,7
storeasc:
mov[edi],dl
incedi
loopnext
movbyteptr[edi],0
}
}
voidmain(void)
{
cout<cin>>decinum;
cout<decitohexa(decinum,hexanum);
cout<<"thehexadecimalvalueof"<cout<cout<<"\n"<}
//************模块汇编******加法************
.modelsmall
.386
.stack20h
.data
msg1byte'A','=',0dh
msg2byte'B','=',0dh
msg3byte'A','+','B','=',0dh
data1asciibyte6dup(0)
data2asciibyte6dup(0)
data1word0
data2word0
data3word0
sumbyte6dup(0)
.code
Mainprocfar
movax,@data
movds,ax
next:
callreturn;调用回车换行子过程
leasi,msg1
callshowmsg;调用显示信息的子过程showmsg显示“A=”
leadi,data1ascii
callinput;调用键盘输