华南理工大学流工程汇编语言实验报告.docx
《华南理工大学流工程汇编语言实验报告.docx》由会员分享,可在线阅读,更多相关《华南理工大学流工程汇编语言实验报告.docx(15页珍藏版)》请在冰点文库上搜索。
华南理工大学流工程汇编语言实验报告
华南理工大学
《计算机原理与汇编语言》课程实验报告
姓名:
学号:
班级:
物流工程
(2)班组别:
合作者:
指导教师:
实验题目1:
先让用户输入一个字符串,再让用户输入一个字母。
输出这个字母在该字符串中出现的次数,再输出首次出现的位置(下标,首个字符的下标为0)。
实验概述
【实验目的及要求】
实验目的:
熟悉数组的使用,数组的遍历与数组单元的比较与统计。
实验要求:
提示用户输入字符串,再提示用户输入一个字符,统计在之前输入的字符串中该字符出现次数和第一次出现的位置。
【实验环境】
操作系统:
WindowsXP
实验内容
【程序源代码及注释】
CODESSEGMENT
ASSUMECS:
CODES
ORG100H
START:
JMPBEGIN
MSG1DB'pleaseinputastring:
','$'
MSG2DB'pleaseinputachar:
','$'
LFCRDB13,10,'$'
STRING1DB255,?
255DUP(?
)
CHAR1DB?
COUNTDB0
POSDB0
BEGIN:
PUSHCS
POPDS
PUSHCS
POPES
LEADX,MSG1
MOVAH,9
INT21H
LEADX,STRING1
MOVAH,10
INT21H
LEADX,LFCR
MOVAH,9
INT21H
LEADX,MSG2
INT21H
MOVAH,1
INT21H
MOVCHAR1,AL
LEADX,LFCR
MOVAH,9
INT21H
MOVCL,STRING1+1
MOVCH,0
LEASI,STRING1+2
MOVBYTEPTRCOUNT,0
MOVBYTEPTRPOS,0
MOVBL,0
CLD
A:
LODSB
INCBL
CMPAL,CHAR1
JNEB
INCBYTEPTRCOUNT
CMPBYTEPTRCOUNT,1
JNEB
MOVPOS,BL
B:
LOOPA
MOVDL,COUNT
ADDDL,30H
MOVAH,2
INT21H
MOVDL,''
INT21H
MOVDL,POS
ADDDL,30H
INT21H
MOVAH,4CH
INT21H
CODESENDS
ENDSTART
小结
遍历数组,将数组元素和查找的字符进行比较,记录第一次出现时的下标。
记录遍历完数组后,查找的赐福出现的次数。
实验题目2:
循环接收用户按键输入,将用户输入的大字母原样输出,将用户输入的小写字母转换为大写字母再输出,用户若输入数字0则退出程序,其它情况输出“error!
”。
实验概述
【实验目的及要求】
实验目的:
熟悉汇编语言的输入输出,以及ASCLL码的使用
实验要求:
输入A-Z,相应输出A-Z
输入a-z,相应输出A-Z
输入其他,返回error!
输入0,退出程序。
【实验环境】
操作系统:
WindowsXP
实验内容
【程序源代码及注释】
DATASSEGMENT
STRINGDB'ERROR!
$'
XDB?
;
DATASENDS
STACKSSEGMENT
DW128DUP(?
);
STACKSENDS
CODESSEGMENT
ASSUMECS:
CODES,DS:
DATAS,SS:
STACKS
START:
MOVAX,DATAS
MOVDS,AX
AGAIN:
MOVAH,01H
INT21H
CMPAL,'0'
JENEXT
CMPAL,'A'
JBERROR;小于A的出错
CMPAL,'Z'
JBEPRINT1;在A,Z之间的输出PRINT1
CMPAL,'a'
JBERROR;在Z(41HH)和a(61H)之间的出错
CMPAL,'z'
JBEPRINT2;在a,z之间的输出PRINT2
JMPERROR
PRINT1:
MOVDL,AL
MOVAH,02H
INT21H
JMPAGAIN;循环输入,AGAIN
PRINT2:
MOVDL,AL
SUBDL,20H
MOVAH,02H
INT21H
JMPAGAIN;循环输入,AGAIN
ERROR:
MOVDX,OFFSETSTRING
MOVAH,09H
INT21H
JMPAGAIN;
NEXT:
MOVAH,4CH
INT21H
CODESENDS
ENDSTART
小结
输入字符,判断字符的ASCII码,从低向高,比较字符。
小于A,A-Z,Z-a,a-z,大于z。
分别输出对应的字符。
实验题目3:
从键盘接收用户输入的一个正整数(0-32767之间),输出该数字的所有因子。
实验概述
【实验目的及要求】
实验目的:
熟悉汇编语言中各种命令的使用。
实验要求:
用户从键盘输入一个0-32767之间的正整数,程序输出该数字的所有因子。
【实验环境】
操作系统:
WindowsXP
实验内容
【程序源代码及注释】
stacksegmentparastack
dw40hdup(?
)
stackends
datasegment
stringdb'请输入一个整数,按回车键结束'
xdw0000h
ydb01h
zdb?
pdw0000h
rdw000ah
qdw0000h
dataends
codesegment
assumeds:
data,cs:
code
start:
movq,sp
movdx,offsetstring
movah,09h
int21h
newchar:
movah,1
int21h
cmpal,0dh
jzlist1
movah,00h
pushax
jmpnewchar
list1:
popax
movbl,y
movz,bl
subal,30h
quan:
mulr
subz,01h
cmpz,00h
jgquan
divr
addx,ax
addy,01h
cmpsp,q
jllist1
list2:
movax,x
cmpp,ax
jgexit
movdx,0000h
movp,0001h
divp
cmpdx,0000h
jglist5
movax,p
list3:
movdx,0000h
divr
pushdx
cmpax0000h
jglist3
list4:
popax
addal,30h
movdl,al
movah,02h
int21h
cmpsp,q
jllist4
moval,20h
movdl,al
movah,02h
int21h
list5:
addp,0001h
jmplist2
exit:
movax,4c00h
int21h
codeends
endstart
小结
实验题目4:
编写主程序,调用input接收用户输入数据,再调用binout、decout、hexout将数据以二、十、十六进制输出显示。
实验概述
【实验目的及要求】
实验目的:
熟悉汇编语言中函数的编写,函数的调用。
以及堆栈的使用。
实验要求:
编写三个函数:
1、函数input:
接收用户一个正整数,将数据保存到AX
2、函数binout:
将AX中的数据以二进制在屏幕上显示出来
3、函数decout:
将AX中的数据以十进制在屏幕上显示出来
4、函数hexout:
将AX中的数据以十六进制在屏幕上显示出来
编写主程序,调用input接收用户输入数据,再调用binout、decout、hexout将数据以二、十、十六进制输出显示。
【实验环境】
操作系统:
WindowsXP
实验内容
【程序源代码及注释】
datasegment
tendw10
bufdb20dup(?
)
dataends
stacksegmentparastack
dw50dup(?
)
stackends
codesegment
assumecs:
code,ds:
data
start:
movax,data
movds,ax
callinputint
movdl,0dh
movah,02h
int21h
movdl,0ah
movah,02h
int21h
callbinout
movdl,0dh
movah,02h
int21h
movdl,0ah
movah,02h
int21h
callprintint
movdl,0dh
movah,02h
int21h
movdl,0ah
movah,02h
int21h
callhexout
movah,4ch
int21h
binoutproc
pushcx
pushbx
pushdx
pushax
movcx,16
a3:
shlbx,1
jca1
movdl,'0'
jmpa2
a1:
movdl,'1'
a2:
movah,02h
int21h
loopa3
popax
popdx
popbx
popcx
ret
binoutendp
inputintprocnear;
pushcx
pushax
pushdx
pushf
movbx,0
movcx,0
ll2:
movah,01h
int21h
cmpal,'0'
jllL1
cmpal,'9'
jalL1
subal,'0'
movcl,al
movax,bx
multen
addax,cx
movbx,ax
jmpll2
ll1:
popf
popdx
popax
popcx
ret
inputintendp
printintprocnear;
pushsi
pushax
pushdx
pushcx
pushf
movsi,0
movax,bx
l2:
cwd
divten
movbuf[si],dl
incsi
cmpax,0
jeL1
jmpl2
l1:
movcx,si
l3:
decsi
movdl,buf[si]
adddl,30h
movah,2
int21h
loopl3
popf
popcx
popdx
popax
popsi
ret
printintendp
hexoutproc
pushcx
pushbx
pushdx
pushax
movax,bx
MOVBX,16;16进制,要除16
MOVCX,4;求4位16进制数.
ABC:
CWD;将AX扩展到DX
DIVBX
PUSHDX;保存余数到堆栈.
LOOPABC
MOVCX,4;显示4位.
ASD:
POPDX
CMPDL,10
JBA48
ADDDL,7
A48:
ADDDL,48
MOVAH,2
INT21H;输出.
LOOPASD
popax
popdx
popbx
popcx
ret
hexoutendp
codeends
endstart
小结
编写三个子程序,除以进制,取余输出。
在主程序中使用call调用函数。
指导教师评语及成绩
评语:
成绩:
指导教师签名:
批阅日期: