当前位置:文档之家› 微机原理程序题

微机原理程序题

微机原理程序题
微机原理程序题

1. 将下面C语言程序的代码片段转换为功能等价的汇编语言代码片段,其中sign与sinteger

均为双字变量。

if ( sinteger = = 0)

sign = = 0;

else If ( siteger > 0)

sign = 1;

else

sign = -1;

mov eax,sinteger

mov edx,sign

cmp eax,0

jnz L1

mov ebx,0

L1:cmp ebx,0

jl L2

mov ebx,1

L2:mov ebx,-1

2. 将下面C语言程序的代码片段转换为功能等价的汇编语言代码片段,其中ch1与caps 均为字节变量。

if (ch1> =’a’ && ch1< =’z’)

caps= =0;

if (ch1> =’A’ && ch1< =’Z’)

caps= =1;

mov ax,ch1

mov bx,caps

cmp ax,a

jb next

cmp ax,z

ja next

mov bx,0

next:cmp ax,A

jl done

cmp ax,Z

ja done

done:

3. 将下面C语言程序的代码片段转换为功能等价的汇编语言代码片段,其中sum与i变量均为双字变量。

sum=0;

for ( i=1;i< =100;i++)

if ( i%2= =0)

sum=sum+i;

mov ecx,i

mov ecx,1

.while(ecx<=100)

mov eax,ecx

xor edx,edx

mov ebx,2

div ebx

cmp edx,0

jnz next

add sum,ecx

next:inc ecx

.endw

1. 能被4整除但不能被100整除,或者年被400整除的年份是闰年。编程写一个完整的程序,求出2012年~2099年中的所有闰年年份,并把它们存放在数组Lyear中。

算法描述

; esi=0;ecx=2012;

; while (ecx<2100)

; { if (year mod 4=0 and year mod 100 <>0) or (year mod 400=0) then

; {Lyear[esi]=ecx;esi++;}

; ecx++;

; }

; Lcounter=esi;

include

.data

Lyear dword 100 dup(?)

Lcounter dword 0

.code

main proc

xor esi,esi ;esi闰年个数计数器,兼做Lyear下标。

mov ecx,2012 ;ecx年份计数器。

.while (ecx<2100)

mov eax,ecx

xor edx,edx

mov ebx,400

div ebx

cmp edx,0

jz leap ;if year mod 400=0 then goto leap

mov eax,ecx

xor edx,edx

mov ebx,4

div ebx

cmp edx,0

jnz next ;if year mod 4<>0 then goto next

mov eax,ecx

xor edx,edx

mov ebx,100

div ebx

cmp edx,0

jz next ;if year mod 100=0 then goto next

leap: mov Lyear[esi*4],ecx

inc esi

mov eax,ecx

call dispuid ;输出,用于验证。可以删掉

call dispcrlf ;输出,用于验证。可以删掉

next: inc ecx

.endw

mov Lcounter,esi

mov eax,esi

call dispuid ;输出,用于验证。可以删掉

call dispcrlf ;输出,用于验证。可以删掉

ret

main endp ;end of main

end main ;end of assembly

2. 编程写一个完整的程序,求出2~100之间的所有素数,并将它们存入Prime数组中,素数

的个数存入变量Pcounter中。

; 采用伪代码pseudo code描述算法

; 1. i=2 to 100 do

; if i is prime number then print i

; 细化如下:

; j=2 to i/2 do

; 1.1.1 if i mod j=0 then goto next i

; 1.1.2 print i

; 合理分配寄存器,i=ebx,j=ecx,edxeax做被除数,ecx做除数.

include

.data

msg byte ' List of prime number',13,10,0

msg1 byte ' Lcounter is :' ,13,10,0

blank byte ' ',0

prime dword 100 dup(?)

pcounter dword 0

.code

main proc ;主程序开始

mov esi,0

mov eax,offset msg

call dispmsg

mov ebx,2

iLoop: cmp ebx,100 ;i循环入口

ja done

mov ecx,ebx

shr ecx,1 ;j=i/2

jLoop: cmp ecx,2 ;j循环入口

jb print

mov eax,ebx

cdq ;xor edx,edx

div ecx ;被除数送eax,32位除法

or edx,edx ;cmp edx,0

jz nexti ;if i mod j=0 then goto next i

dec ecx

jmp jLoop

print: mov prime[esi*4],ebx

inc esi

mov eax,ebx

mov eax,offset blank

call dispmsg ;显示空格

nexti: inc ebx ;i=i+1

jmp iLoop

done: call dispcrlf

mov eax,offset msg1

call dispmsg

mov pcounter,esi

mov eax,esi

call dispuid

call dispcrlf

ret ;返回操作系统

main endp ;主程序结束

end main ;end of assembly

3. 编程写一个完整的程序,将数组aray中的元素按逆序存放,要求程序中附加的变量最少。数据段的定义如下:

.data

aray dword 12,4, 168,122,-33,56,78,99,345, 66,-5

; 采用伪代码pseudo code描述算法

; 1. i=n-1 downto 1 do

; j=0 to i-1

; 1.1.1 if a[j]>a[j+1] then swap

; 合理分配寄存器,i=ecx,j=edx ,i-1=ecx-1

include

.data ;set data segment

blank3 byte 3 dup(20h),0

array dword 12,4,-168,122,33,56,78,99,345,-66,-5

char byte ?

msg byte 13,10,'press any key to continue ...',0 ;字符串

.code

main proc

mov ecx,(lengthof array)-1 ;计数循环的初值

iLoop: ;i循环入口

dec ecx ;ecx=i-1

xor edx,edx

jLoop: ;j循环入口,循环控制变量edx

cmp edx,ecx

jg nexti

mov eax,array[edx*4]

cmp eax,array[edx*4+4]

jge nextj

xchg eax,array[edx*4+4]

mov array[edx*4],eax

nextj: inc edx

jmp jLoop

nexti: inc ecx ;retrieve ecx

loop iLoop

print: xor ecx,ecx

again: cmp ecx,lengthof array-1

jg done

mov eax,array[ecx*4]

call dispsid

mov eax,offset blank3 ;显示空格

call dispmsg

inc ecx

jmp again

done: mov eax,offset msg ;显示:press any key to continue

call dispmsg

mov eax,offset char ;暂停,等待按任意键

call readc

ret ;返回操作系统

main endp

end main ;end of assembly

4. 编程写一个完整的程序,求数组aray中的最大值与最小值,并将它们分别存入max和min 元中。数据段的定义如下:

.data

aray dword 12,4,-168,122,-33,56,78,99,345,-66,-5

min dword ?

max dword ?

include

.data

aray dword 12,4,-168,122,-33,56,78,99,345,-66,-5

min dword ?

max dword ?

prompt byte 'Enter an integers :',0

maxStr byte 'max=%d',13,10,0 ;显示字符串的格式描述串

minStr byte 'min=%d',13,10,0

.code

main proc

mov ecx,lengthof ara -1

mov eax,ara[0] ;eax:max

mov ebx,eax ;ebx,min

mov esi,1

again: cmp eax,ara[esi*4]

jge small

mov eax,ara[esi*4]

small: cmp ebx,ara[esi*4]

jle next

mov ebx,ara[esi*4]

next: inc esi

loop again

mov max,eax

mov min,ebx

ret ;返回操作系统

main endp

end main

5. 编程写一个完整的程序统计msg中的空格的个数与小写字母的个数,并分别将它们存入space单元与char单元中。数据段的定义如下:

.data

msg byte 'I love XUT !',13,10,0

space dword ?

char dword ?

include

.data

msg byte 'I love XUT!',13,10,0

space dword ?

char dword ?

.code

main proc

mov ebx,0

xor edi,edi

mov esi,edi

l1: mov al,msg[ebx]

cmp al,20h

jnz done1

cmp al,0

jz next

inc edi

inc ebx

jmp l1

done1: cmp al,'a'

jb done2

cmp al,'z'

ja done2

cmp al,0

jz next

inc esi

inc ebx

jmp l1

done2: cmp al,0

jz next

inc ebx

jmp l1

next: mov space,edi

mov eax,space

call dispuid

call dispcrlf

mov char,esi

mov eax,char

call dispuid

call dispcrlf

ret

main endp

end main

6. 编程写一个完整的程序,将字符串msg中所有的小写字母转换为大写字母。数据段的定义如下:

.data

msg byte 'I love XUT !',13,10,0

include

.data

msg byte 'I love XUT!',13,10,0

.code

main proc

mov ebx,0

l1: mov al,msg[ebx]

cmp al,'a'

jb done

cmp al,'z'

ja done

sub al,20h

done: cmp al,0

jz done1

inc ebx

call dispc

jmp l1

done1:

ret

main endp

end main

7. array是一无符号数数组,数据段的定义如下。要求:编程写一个完整的程序求出数组元素中偶数的和,并将它存入esum单元中。

.data

array dword 12,34,123,78,43,234,79,86,98,20 esum dword ?

算法描述:

; 1. esum=0;

; 2. for i=0 to n-1 do

; if a[i] is evennunber then esum=esum+a[i];

; 判断偶数,采用 test 指令测试最低位。

; 合理分配寄存器:采用loop循环,ecx=lengthof array esum=eax=0,esi=0,做下标,采用带比例因子的相对寻址处理数组。

include

.data

array dword 12,34,123,78,43,234,79,86,98,20

esum dword ?

fmtStr byte ' esum=%d',13,10,0 ;格式描述串

.code

main proc

mov ecx,lengthof array

xor eax,eax ;esum=eax=0

mov esi,eax ;数组下标

again: mov ebx,array[esi*4]

test ebx,1

jnz next ;if a[i] is evennunber then esum=esum+a[i]; add eax,ebx ;注意:转换成汇编语言时,测试的是不是偶数时则取下一个数测试。

next: inc esi

loop again

mov esum,eax

invoke printf,offset fmtStr,esum

ret ;return to Windows

main endp ;end of main

end main ;end of assembly

8. “回文串”是一个正读和反读都一样的字符串,比如“eye”、“level”、“noon”等

。请写一个程序测试一字符串是否是“回文”,是“回文”则显示“Y”,否则显示“N”。显示一个字符的子程序为:dispc,入口参数:AL=要显示个字符的SACII码。

; 算法描述:

; left,right分别指向串的第一个和最后一个元素,采用首尾比较。

; 1. left=0,right=n-1 ,flag='Y' ;

; 2. while left

; if a[left++]<>a[right--] then

; { flag= 'N'; break;}

; 3. printf flag

; 合理分配寄存器:left=esi,right=edi ,flag=al='Y'

include

.data

msg byte 'level',0

count equ lengthof msg

.code

main proc

mov esi,0 ;left指针

mov edi,count-2 ;right指针,串长不包括结束标志0

mov al,'Y' ; flag=al='Y'

.while (esi

mov ah,msg[esi] ; left=esi

cmp ah,msg[edi] ; right=edi

je next

mov al,'N'

jmp display

next: inc esi ;移动指针指向下一个元素

dec edi ;移动指针指向下一个元素

.endw

display: call dispc

call dispcrlf

ret ;return to Windows

main endp ;end of main

end main ;end of assembly

9. 回文是指正读和反读都一样的数或文本。例如:11、121、12321等,编写程序,求10到10000之间所有回文数并输出。显示一个无符号数的子程序为:dispuid,入口参数:EAX=要显示无符号数的值。

include

.data

blank byte ' ',0

char byte ?

anykey byte 13,10,'press any key to continue...',0

.code

main proc

mov ecx,10

mov ebx,ecx

.repeat

xor esi,esi

mov eax,ecx

.while(eax>0)

xor edx,edx

div ebx

imul esi,10

add esi,edx

.endw

cmp esi,ecx

jne next

mov eax,ecx

call dispuid

call dispcrlf

next: inc ecx

.until(ecx>10000)

ret

main endp

end main

10. 编程写一个名为Prime的子程序,用于测试一个整数是否是素数,主子程序间的参数传递通过堆栈完成。调用Prime子程序求出2~100之间的所有素数,并将它们存入Parray 数组中,素数的个数存入变量Pcounter中。

; 采用伪代码pseudo code描述算法

; 1. i=2 to 100 do

; if prime(i) then print i

; 构造函数prime(i):

; if i is prime number then prime(i)=1 else prime(i)=0

; 合理分配寄存器,i=ebx,j=ecx,edxeax做被除数,ecx做除数.

include

.data

msg byte ' List of prime number',13,10,0

msg1 byte ' pcounter is :' ,13,10,0

blank byte ' ',0

anyKey byte 13,10,'press any key to continue ...',13,10,0

parray dword 100 dup(?)

pcounter dword 0

.code

main proc ;主程序开始

mov esi,0

mov eax,offset msg

call dispmsg

mov ebx,2 ;i循环的初值

.while (ebx<=100) ;i循环入口

push ebx ;push parameter on stack参数进栈

call prime

test eax,eax

jz next

l1: mov parray[esi*4],ebx

inc esi

mov eax,ebx

call dispuid ;输出,用于验证。可以删掉 mov eax,offset blank

call dispmsg

next: inc ebx

.endw

call dispcrlf

mov eax,offset msg1

call dispmsg

mov pcounter,esi

mov eax,esi

call dispuid

call dispcrlf

ret ;返回操作系统

main endp ;主程序结束

; function: 判断一个无符号整数i是否是素数

; Receives: 从栈获取无符号整数i

; Returns: if i is prime number then eax=1 else eax=0

; 采用伪代码pseudo code描述算法

; 1 j=2 to i/2 do

; if i mod j=0 then {eax=0 return}

; 2 eax=1;return

; 合理分配寄存器,j=ecx,edxeax做被除数,ecx做除数.

prime proc

push ebp ;save ebp

mov ebp,esp

push ecx

push edx

push edi

push esi ;save ,ecx,edx,edi,esi

mov esi,[ebp+8] ;get parameter i

mov edi,esi

shr esi,1 ;esi=i/2

mov ecx,2 ;j循环入口

.while (ecx<=esi)

mov eax,edi

xor edx,edx ;edx=0

div ecx ;被除数送eax,32位除法

or edx,edx ;cmp edx,0

jz retZero ;if i mod j=0 then eax=0

inc ecx

.endw

mov eax,1 ;i是否是素数eax=1

jmp restoreReg

retZero: mov eax,0

restoreReg:

pop esi

pop edi

pop edx

pop ecx

pop ebp

ret 1*4 ;clean up stack

prime endp

end main ;end of assembly

11. 编程写一个名为Gcd的求两个数最大公约数子程序,主子程序间的参数传递通过堆栈完成。调用Gcd子程序求出三个双自变量:dvar1、dvar2与dvar3的最大公约数并输出。显示一个无符号数的子程序为:dispuid,入口参数:EAX=要显示无符号数的值。

include

.data

dvar1 dword 2012

dvar2 dword 128

dvar3 dword 456

dgcd dword ? ;存放2个无符号整数的最大公约数

fmtStr byte ' gcd(%d,%d,%d)=%d',13,10,0

.code

main proc

push dvar1

push dvar2 ;参数dvar1,dvar2进栈,传值

push offset dgcd ;dgcd的地址进栈,传地址

call Gcd ;dgcd=dvar1,dvar2的最大公约数

push dvar3

push dgcd ;参数dvar3,dgcd进栈,传值

push offset dgcd ;dgcd的地址进栈,传地址

call Gcd

invoke printf,offset fmtStr,dvar1,dvar2,dvar3,dgcd

ret ;return to Windows

main endp ;end of main

Gcd proc

; function: 求2个无符号整数的最大公约数。

; Receives: 从栈中获取无符号整数a,b及存放最大公约数变量gcd的地址

; Returns: gcd=无符号整数a,b的最大公约数。

; 算法描述:

; 1. while b<>0 do

; { r=a mod b;a=b;b=r;}

; 2. gcd=a;

; 注意合理的分配使用寄存器,edx,eax做被除数

; ebx=gcd的地址,eax=a,ecx=b

push ebp

mov ebp,esp ; 建立访问栈参数的指针基准

push eax ; 保护子程序中要使用的寄存器

push ebx

push ecx

push edx

mov ebx,[ebp+8] ;ebx=变量gcd的地址

mov ecx,[ebp+12] ;ecx=b

mov eax,[ebp+16] ;eax=a

.while (ecx!=0)

xor edx,edx ;被除数送edx,eax,32位除法

div ecx ;div指令执行后eax=商,edx=余数

mov eax,ecx ;a=b

mov ecx,edx ;b=r,edx=余数

.endw

mov [ebx],eax ;gcd=最大公约数

restore: pop edx ; 恢复子程序中使用过的寄存器

pop ecx

pop ebx

pop eax

pop ebp

ret 3*4 ;清理栈中的参数

Gcd endp ;end of Gcd

end main ;end of assembly

12. 在一个已知长度的字符串中查找是否包含“BUG”子字符串。如果存在,显示“Y”,否则显示“N”。显示一个字符的子程序为:dispc,入口参数:AL=要显示个字符的SACII码。include

.data

string byte 'If you find any error in the program, you can DEBUG it.'

count = sizeof string

bug byte 'BUG'

.code

start:

mov ecx,count

mov edi,offset string

L1: mov esi,offset bug

push edi

mov edx,sizeof bug

LN: mov al,[esi]

cmp [edi],al

jne L2

inc esi

inc edi

dec edx

jne LN

pop edi

mov al,'Y'

jmp L3

L2: pop edi

inc edi

loop L1

mov al,'N'

L3: call dispc

exit 0

end start

13. 已知一个字符串的长度,剔除其中所有的空格字符。请从字符串最后一个字符开始逐个向前判断、并进行处理。

include

.data

string byte 'Let us have a try !',0dh,0ah,0

.code

start:mov ecx,sizeof string

cmp ecx,2

jb done

lea eax,string ; 显示处理前的字符串

call dispmsg

mov esi,ecx

dec esi

outlp: cmp string[esi],' ' ; 检测是否是空格

jnz next ; 不是空格继续循环

mov edi,esi ; 是空格,进入剔除空格分支

dec ecx

inlp: inc edi

mov al,string[edi] ; 前移一个位置

mov string[edi-1],al

cmp edi,ecx

jb inlp

next: dec esi ; 继续进行

cmp esi,0

jnz outlp ; 为0结束

lea eax,string ; 显示处理后的字符串

call dispmsg

done: exit 0

end start

14. 编写一子程序,将一个32位二进制数用8位十六进制形式在屏幕上显示出来。采用堆栈方法传递这个32位二进制数,并写主程序验证它。显示一个字符的子程序为:dispc,入

口参数:AL=要显示个字符的SACII码。

.include

.data

wvar dword 307281AFH

.code

start:push wvar

call disp

add esp,4

mov al,'H'

call dispc

disp proc

push ebp

mov ebp,esp

push ebx

push ecx

mov ecx,8

mov eax,[ebp+8]

dhw1: rol eax,4

mov ebx,eax

and al,0fh ; 转换为ASCII码

add al,30h

cmp al,'9'

jbe dhw2

add al,7

dhw2: call dispc

mov eax,ebx

loop dhw1

pop ecx

pop ebx

pop ebp

ret

disp endp

exit 0

end start

15. 编程写一个名为Bubble的冒泡排序子程序,主子程序间的参数传递通过堆栈完成;并写主程序验证它。显示一个无符号数的子程序为:dispuid,入口参数:EAX=要显示无符号数的值。

.include

data

array dword 12,4,168,122,-33,56,78,99,345,66,-5

count equ lengthof array

fmtStr byte '%5d'

.code

main proc

push offset array ;array的首地址进栈,传地址

push count ;数组元素的个数进栈,传值

call Bubble

xor esi,esi ;以下的while循环用于验证。可以删掉 .while (esi

pushad

popad

inc esi

.endw

ret ;return to Windows

main endp ;end of main

Bubble proc

; function: Bubble Sort

; Receives: 从栈获取数组的首地址及元素的个数

; Returns: 无

; 算法描述:

; 1. ecx=n-1;

; 2. while ecx>0

; { esi=array;数组的首地址

; ebx=ecx;

; while ebx>0

; { if [esi]>[esi+4] then

; swap [esi],[esi+4] ;

; esi=esi+4;ebx--;

; }

; ecx--;}

push ebp

mov ebp,esp ; 建立访问栈参数的指针基准push eax ; 保护子程序中要使用的寄存器

push ebx

push ecx

push esi

push edi

mov esi,[ebp+12] ;array的首地址

mov edi,esi

mov ecx,[ebp+8] ;数组元素的个数

dec ecx

again: mov esi,edi ;esi=array的首地址

mov ebx,ecx

.while (ebx>0)

mov eax,[esi]

cmp eax,[esi+4] ; 比较两个相邻的元素 jl next

xchg eax,[esi+4]

mov [esi],eax ; 交换两个相邻的元素next: add esi,4 ; esi指向下一个元素 dec ebx

.endw

loop again

restore: pop edi ; 恢复子程序中使用过的寄存器 pop esi

pop ecx

pop ebx

pop eax

pop ebp

ret 2*4 ;清理栈中的参数

Bubble endp ;end of Bubble

end main ;end of assembly

《Python程序设计》题库 - 读程序题

【程序1】 题目:有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?【程序2】 题目:企业发放的奖金根据利润提成。利润(I)低于或等于10万元时,奖金可提10%;利润高于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可可提成7.5%;20万到40万之间时,高于20万元的部分,可提成5%;40万到60万之间时高于40万元的部分,可提成3%;60万到100万之间时,高于60万元的部分,可提成1.5%,高于100万元时,超过100万元的部分按1%提成,从键盘输入当月利润I,求应发放奖金总数? 1#Filename:002.py 2 i = int(raw_input('Enter the profit:')) 3 arr = [1000000,600000,400000,200000,100000,0] 4 rat = [0.01,0.015,0.03,0.05,0.075,0.1] 5 r = 0 6for idx in range(0,6): 7if i>arr[idx]: 8 r+=(i-arr[idx])*rat[idx] 9print (i-arr[idx])*rat[idx] 10 i=arr[idx] 11print r 【程序3】 题目:一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少? 【感谢12楼的同学peiqianggao提供代码】 # -*- coding:utf-8 -*- ''' Created on 2015-6-7 # 第三题:一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少 @author: Administrator ''' import math num = 1 while True:

JAVA代码编写一简单网络聊天程序

要求:聊天室服务器、聊天室客户端;客户端之间可以聊天。 因为我是初级选手,想借此程序分析学习java,所以代码最好多一点注释... 分数有限,望大家不吝赐教!!问题补充: 需要图形用户界面哦,最好用swing组件 服务器端:采用多线程,可以向客户广播:当前聊天室人数,客户名称列表,客户进入离开提示; 客户端:可以设定昵称,性别,客户间可以私聊 服务器端: import java.awt.*; import java.awt.event.*; import javax.swing.*; import java.io.*; import https://www.doczj.com/doc/af4657146.html,.*; public class Server extends JFrame implements ActionListener{ JPanel contentPane; JLabel jLabel2 = new JLabel(); JTextField jTextField2 = new JTextField("4700"); JButton jButton1 = new JButton(); JLabel jLabel3 = new JLabel(); JTextField jTextField3 = new JTextField(); JButton jButton2 = new JButton(); JScrollPane jScrollPane1 = new JScrollPane(); JTextArea jTextArea1 = new JTextArea(); ServerSocket server = null; Socket socket = null;BufferedReader instr =null;PrintWriter os=null ; //Construct the frame public Server() { jbInit(); } class MyThread extends Thread{//该线程负责接受数据 public void run(){ try{ while(true){ this.sleep(100); instr= new BufferedReader(new InputStreamReader(socket.getInputStream())); if(instr.ready()){ //检查是否有数据 jTextArea1.append("客户端: "+instr.readLine()+"\n"); } } }catch(Exception ex){} }

微机原理课程设计报告

微型计算机技术课程设计 指导教师: 班级: 姓名: 学号: 班内序号: 课设日期: _________________________

目录 一、课程设计题目................. 错误!未定义书签。 二、设计目的..................... 错误!未定义书签。 三、设计内容..................... 错误!未定义书签。 四、设计所需器材与工具 (3) 五、设计思路..................... 错误!未定义书签。 六、设计步骤(含流程图和代码) ..... 错误!未定义书签。 七、课程设计小结 (36)

一、课程设计题目:点阵显示系统电路及程序设计 利用《汇编语言与微型计算机技术》课程中所学的可编程接口芯片8253、8255A、8259设计一个基于微机控制的点阵显示系统。 二、设计目的 1.通过本设计,使学生综合运用《汇编语言与微型计算机技术》、《数字电子技术》等课程的内容,为今后从事计算机检测与控制工作奠定一定的基础。 2.掌握接口芯片8253、8255A、8259等可编程器件、译码器74LS138、8路同相三态双向总线收发器74LS245、点阵显示器件的使用。 3.学会用汇编语言编写一个较完整的实用程序。 4.掌握微型计算机技术应用开发的全过程,包括需求分析、原理图设计、元器件选用、布线、编程、调试、撰写报告等步骤。 三、设计内容 1.点阵显示系统启动后的初始状态 在计算机显示器上出现菜单: dot matrix display system 1.←left shift display 2.↑up shift display 3.s stop 4.Esc Exit 2.点阵显示系统运行状态 按计算机光标←键,点阵逐列向左移动并显示:“微型计算机技术课程设计,点阵显示系统,计科11302班,陈嘉敏,彭晓”。 按计算机光标↑键,点阵逐行向上移动并显示:“微型计算机技术课程设计,点阵显示系统,计科11302班,陈嘉敏,彭晓”。 按计算机光标s键,点阵停止移动并显示当前字符。 3.结束程序运行状态 按计算机Esc键,结束点阵显示系统运行状态并显示“停”。 四.设计所需器材与工具 1.一块实验面包板(内含时钟信号1MHz或2MHz)。 2.可编程芯片8253、8255、74LS245、74LS138各一片,16×16点阵显示器件一片。

C语言程序设计阅读程序题库

阅读程序题 导读:学会阅读程序对于初学者来说很重要,一方面可以巩固所学的语法知识,另一方面通过阅读别人写好的程序来打开自己的思路,就所谓见多识广。读者通过阅读理解程序,从给出的四个备选参考答案中,选择程序的正确输出。如果选择有误,就要认真分析原因,是概念方面的错误还是对程序逻辑理解不对,从而加深对语法规则的理解,提高程序设计能力。程序设计语言是开发程序的一个工具,学习语言的目的是为了编写程序来解决实际问题,所以特别提倡通过实际上机来检验备选答案,增强动手能力。习题基本上是按照教材的章节来安排的,读者可以根据学习的进度选择部分习题。【】以下程序的输出结果是。 main() {floata; printf("%g",a); } A)+00B)0.0 C)0 【】下面程序的输出结果是____。

#include<> main() {intx=10; {intx=20; printf("%d,",x); } printf("%d\n",x); } A)10,20B)20,10 C)10,10D)20,20 【】以下程序的输出结果是____。 main() {unsignedintn; inti=-521; n=i; printf("n=%u\n",n); } A)n=-521B)n=521 C)n=65015D) 【】以下程序的输出结果是。 main() {intx=10,y=10;printf("%d%d\n",x――,――y);

} A)1010B)99 C)910D)109 【】以下程序的输出结果是____。main() {intn=1; printf("%d%d%d\n",n,n++,n--); } A)111B)101 C)110D)121 【】以下程序的输出结果是____。main() {intx=0x02ff,y=0x0ff00; printf("%d\n",(x&y)>>4|0x005f);} A)127B)255 C)128D)1 【】以下程序的输出结果是____。main() {inta=1; charc='a'; floatf=;

java简单聊天小程序

网络编程java简单聊天小程序[下次修改成多线程的,这个必须等待对方输入结束,有机会修改成可视化窗口] By 刘汪洋 写入正确的ip地址即可正常用当然目前只停留在命令行界面 还没有写成可视化窗口界面 运行时请带上参数 如java TransServer 张三 Java TransClient 李四 ( 和刘正南在局域网试验的截图成功 这是修改后的 加上了姓名! ) (修改前的截图)

代码: 客户端: package com.baidu.chat; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintWriter; import https://www.doczj.com/doc/af4657146.html,.Socket; import https://www.doczj.com/doc/af4657146.html,.UnknownHostException; // 简单聊天小程序客户端 public class TransClient { public static void main(String[] args)

{ if(args[0]==null) args[0] = "他"; startClient(args[0]); } private static void startClient(String name) { Socket sk = null; BufferedReader bufr = null; try { sk = new Socket("127.0.0.1",10000);// 1 创建 socket服务 bufr = new BufferedReader(new InputStreamReader(System.in));// 2 获取录入键盘 PrintWriter out = new PrintWriter(sk.getOutputStream(),true);// 3 获取输出流true表示自动刷新 BufferedReader bufIn = new BufferedReader(new InputStreamReader(sk.getInputStream()));// 4 获取输入流 // 5 发送获取 String text_send = ""; String text_get = ""; String ServerName = ""; System.out.print("聊天已开启..."+"\r\n"+"我说:");

微机原理子程序设计

实验三子程序设计 1、实验目的: (1)熟悉汇编语言的编辑、汇编、连接、运行的全过程。 (2)了解汇编语言的程序结构、学习调用过程实现输入输出及用INCLUDE 命令包含文件的方法。 (3)子程序设计 2.实验步骤: (1)用编辑软件记事本或EDIT 编辑一个扩展文件名为ASM的汇编语言源程序。 (2)用汇编程序TASM 汇编上述的汇编语言源程序,形成目标代码文件。 (扩展名为OBJ) (3)用连接程序TLINK连接目标代码文件,形成可执行文件。(扩展名为EXE) (4)运行可执行文件。观察执行结果,以验证其正确性。 3.实验内容: (1)从键盘上输入若干个十进制数(-32767

again1: mov ax,[si] cmp ax,[si+2] jle next1 xchg ax,[si+2] xchg ax,[si] next1: add si,2 loop again1 mov cx,di loop again2 mov ah,9 lea dx,out_message int 21h mov cx,count ;输出(升序) lea si,array again3: mov bx,[si] call write call dpcrlf inc si inc si loop again3 mov ax,4c00h int 21h INCLUDE out_B_D.ASM INCLUDE in_D_B.ASM END (2)从键盘上输入若干个十进制数(-32767

C语言程序设计阅读程序题库及答案

阅读程序题 【2.1】以下程序的输出结果是。 main(D ) { float a; printf("%g",a); } A) 0.00000e+00 B) 0.0 C) 1.00000e-07 D) 0 【2.2】下面程序的输出结果是B____。 #include main( ) { int x=10; { int x=20; printf ("%d,", x); } printf("%d\n", x); } A) 10,20 B) 20,10 C) 10,10 D) 20,20 【2.3】以下程序的输出结果是___B_。 main()

{ unsigned int n; int i=-521; n=i; printf("n=%u\n",n); }//变量i中的负号传送给变量n后,因n是无符号数,已不作为负号处理。 【2.4】以下程序的输出结果是。 main(D ) { int x=10, y=10; printf("%d %d\n", x――, ――y); } A) 10 10 B) 9 9 C) 9 10 D) 10 9 【2.5】以下程序的输出结果是___B。 main() { int n=1; printf("%d %d %d\n",n,n++,n--); } // C语言在执行printf()时,对函数中的表达式表列的处理顺序是从后向前,即先处理n- -,再处理n++,最后处理n, A) 1 1 1 B) 1 0 1 C) 1 1 0 D) 1 2 1 【2.6】以下程序的输出结果是____。 main() { int x=0x02ff,y=0x0ff00;

微机原理实验报告

汇编语言程序设计实验 一、实验内容 1.学习并掌握IDE86集成开发环境的使用,包括编辑、编译、链接、 调试与运行等步骤。 2.参考书例4-8,P165 (第3版161页)以单步形式观察程序的 执行过程。 3.修改该程序,求出10个数中的最大值和最小值。以单步形式观 察,如何求出最大值、最小值。 4.求1到100 的累加和,并用十进制形式将结果显示在屏幕上。 要求实现数据显示,并返回DOS状态。 二、实验目的 1.学习并掌握IDE86集成开发环境的使用 2.熟悉汇编语言的基本算法,并实际操作 3.学会利用IDE86进行debug的步骤 三、实验方法 1.求出10个数中的最大值和最小值 (1)设计思路:利用冒泡法,先对数据段的10个数字的前2个比 较,把二者中大的交换放后面。在对第二个和第三个数比较,把 二者中较大的交换放后面,依此类推直到第十个数字。这样第十 位数就是10个数里面最大的。然后选出剩下9个数字里面最大 的,还是从头开始这么做,直到第九个数字。以此类推直到第一 个数字。

(2)流程图 2.求1到100 的累加和,并用十进制形式将结果显示在屏幕上。 要求实现数据显示,并返回DOS状态

(1)设计思路:结果存放在sum里面,加数是i(初始为1),进行 100次循环,sum=sum+I,每次循环对i加1. (2)流程图: 四、 1.求出10个数中的最大值和最小值

DSEG SEGMENT NUM DB -1,-4,0,1,-2,5,-6,10,4,0 ;待比较数字 DSEG ENDS CODE SEGMENT ASSUME DS:DSEG,CS:CODE START:MOV AX,DSEG MOV DS,AX LEA SI,NUM MOV DX,SI MOV CL,9 ;大循环计数寄存器初始化 NEXT1:MOV BL,CL ;大循环开始,小循环计数器初始化MOV SI,DX NEXT2:MOV AL,[SI+1] CMP [SI],AL ;比较 JGGONE ;如果后面大于前面跳到小循环末尾CHANGE:MOV AH,[SI] ;交换 MOV [SI+1],AH MOV [SI],AL JMP GONE GONE:add SI,1 DEC BL JNZ NEXT2

《单片机》读程序题题库答案

四、阅读下列程序,注释并填写指令执行后的结果(每题10分) 1、 ORG 0 LJMP START ;跳转到(PC)=0030H处 ORG 30H START:MOV R0,#20H ;#20H->R0 (R0)=20H MOV R1,#30H ; #30H->R1 (R1)=30H MOV A,R0 ;(R0)->A (A)=20H ADD A,#36H ;(A)+#36H->A (A)=56H MOV P1,A ;(A)->P1 (P1)=56H INC R0 ;(R0)+1->R0 (R0)=21H INC R1 ;(R1)+1->R0 (R1)=31H ANL A,R1 ;(A)&(R1)->A (A)=10H SWAP A ;累加器A的高低4位交换 (A)=01H PUSH ACC ;累加器A内容压栈 MOV P1,A ;(A)->P1 (P1)=01H POP B ;堆栈内容出栈到B寄存器 (B)=01H MOV R0,A ;(A)->R0 (R0)=01H MOV DPTR,#2200H ;#2200H->DPTR (DPTR)=2200H SETB C ;1->Cy (Cy)=1 ADDC A,#0 ;(A)+0+(Cy)->A (A)=02H MOVX @DPTR,A ;(A)->(DPTR) (2200H)=02H END (R0)= 01H (R1)= 31H (P1)= 01H (B)= 01H (2200H)= 02H 2、 ORG 0 LJMP START ;跳转到(PC)=0030H处 ORG 30H START:MOV SP,#50H ;#50H->SP (SP)=50H MOV R2,#10H ;#10H->R2 (R2)=10H MOV DPTR,#3000H ;#3000H->DPTR (DPTR)=3000H CRL A ;0->A (A)=0 LOOP: MOVX @DPTR,A ;(A)->(DPTR) INC DPTR ;(DPTR)+1->DPTR DJNZ R2,LOOP ;(R2)-1->R2 若(R2)不等于零则转移到LOOP处 INC DPH ;(DPH)+1->DPH (DPH)=31H (R2)=00H (DPL)=10H INC DPH ;(DPH)+1->DPH (DPH)=32H MOV 20H,#36H ;#36H->(20H) (20H)=36H SETB 00H ;位地址00H置1 20H.0=1 (20H)=37H MOV A,20H ;(20H)->A (A)=37H MOVX @DPTR,A ;(A)->(DPTR) (DPTR)=3210H (3210H)=37H INC A ;(A)+1->A (A)=38H INC A ;(A)+1->A (A)=39H PUSH ACC ;累加器A内容压栈 (SP)=51H XCH A,R2 ;累加器A的内容与R2内容互换 (A)=00H (R2)=39H POP DPH ;堆栈内容弹到DPH (DPH)=39H

java编写的简单局域网聊天室(适合初学者).

import java.awt.BorderLayout; import java.awt.Button; import java.awt.Color; import java.awt.Dimension; import java.awt.Font; import java.awt.Frame; import java.awt.Panel; import java.awt.Point; import java.awt.TextArea; import java.awt.TextField; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.KeyAdapter; import java.awt.event.KeyEvent; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import java.io.File; import java.io.FileWriter; import java.io.IOException; import https://www.doczj.com/doc/af4657146.html,.DatagramPacket; import https://www.doczj.com/doc/af4657146.html,.DatagramSocket; import https://www.doczj.com/doc/af4657146.html,.InetAddress; import java.text.SimpleDateFormat; import java.util.Date; import java.util.Scanner; import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock; public class GUI_Chat extends Frame { private static final long serialVersionUID = 1L; private TextArea viewTextArea = new TextArea(20, 1; private TextArea sendTextArea = new TextArea(; private TextField ipTextField = new TextField(20; private Button sendButton = new Button(" 发送" ; private Button clearButton = new Button(" 清屏" ; private Button logButton = new Button(" 记录" ; private Button shakeButton = new Button(" 震动" ; private Panel panel = new Panel(; private DatagramSocket socket ;

微机原理实验报告——分支程序设计

实验三 分支程序设计 一、实验要求和目的 1.熟悉汇编语言程序设计结构; 2.熟悉汇编语言分支程序基本指令的使用方法; 3.掌握利用汇编语言实现单分支、双分支、多分支的程序设计方法。 二、软硬件环境 1.硬件环境:微机CPU 486以上,500MB 以上硬盘,32M 以上内存; 2.软件环境:装有MASM 、DEBUG 、LINK 和EDIT 等应用程序。 三、实验涉及的主要知识单元 在实际应用中,经常根据一些条件来选择一条分支执行。汇编语言的条件判断主要是通过状态寄存器中的状态位、无符号数相减或有符号和相减而导致的结果来进行。下面就有符号数转移指令来了解在汇编语言程序设计方法。 四、实验内容与步骤 1.实验内容 (1)编写计算下面函数值的程序: ?? ? ??<-=>=0,10,00,1x x x y 设输入数据为X 、输出数据Y ,且皆为字节变量,使用Debug 查看X 、Y 两个变量的 数据 (2)以ARRAY 为首地址的内存单元中,存放5个8位的不带符号数,找出5个数中的最大数,并将结果存入RESULT 字节单元中。 2.实验步骤 a.实验流程图 (1)计算函数值的流程图

b.编写程序 (1)计算函数值的实验代码 DATA SEGMENT X DB 12 Y DB ? DATA ENDS STACK SEGMENT STACK'STACK' DB 100H DUP(?) STACK ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:STACK START: MOV AX,DATA MOV DS,AX MOV AL,XX CMP AL,0 ;把AX 与0比较 JGE BIGPR ;0≥AL 转入BIGPR MOV Y,0FFFFH ;0AL 则1=Y JMP EXIT EQUPR: MOV Y,0 ;0=AL 则0=Y EXIT: MOV AL,Y RET CODE ENDS END START

微机原理实验报告

西安交通大学实验报告 课程_微机与接口技术第页共页 系别__生物医学工程_________实验日期:年月日 专业班级_____组别_____交报告日期:年月日 姓名__ 学号__报告退发 ( 订正、重做 ) 同组人_教师审批签字 实验一汇编语言程序设计 一、实验目的 1、掌握Lab6000p实验教学系统基本操作; 2、掌握8088/8086汇编语言的基本语法结构; 3、熟悉8088/8086汇编语言程序设计基本方法 二、实验设备 装有emu8086软件的PC机 三、实验内容 1、有一个10字节的数组,其值分别是80H,03H,5AH,FFH,97H,64H,BBH,7FH,0FH,D8H。编程并显示结果: 如果数组是无符号数,求出最大值,并显示; 如果数组是有符号数,求出最大值,并显示。 2、将二进制数500H转换成二-十进制(BCD)码,并显示“500H的BCD是:” 3、将二-十进制码(BCD)7693转换成ASCII码,并显示“BCD码7693的ASCII是:” 4、两个长度均为100的内存块,先将内存块1全部写上88H,再将内存块1的内容移至内存块2。在移动的过程中,显示移动次数1,2 ,3…0AH…64H(16进制-ASCII码并显示子

程序) 5、键盘输入一个小写字母(a~z),转换成大写字母 显示:请输入一个小写字母(a~z): 转换后的大写字母是: 6、实现4字节无符号数加法程序,并显示结果,如99223344H + 99223344H = xxxxxxxxH 四、实验代码及结果 1.1、实验代码: DATA SEGMENT SZ DB 80H,03H,5AH,0FFH,97H,64H,0BBH,7FH,0FH,0D8H;存进数组 SHOW DB 'THE MAX IS: ','$' DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START: MOV AX,DATA ;把数据的基地址赋给DS MOV DS,AX MOV DX,OFFSET SHOW ;调用DOS显示字符串 MOV AH,09H INT 21H MOV SI ,OFFSET SZ ;数组的偏移地址赋给SI MOV CX,10 ;存进数组的长度给CX MOV DH,80H ;将数组的第一个数写进DH NEXT: MOV BL,[SI] ;将数组的第一个数写进BL CMP DH,BL ;比较DH和BL中数的到校 JAE NEXT1 ;如果DH中的数大于BL中,将跳转到NEXT1 MOV DH,BL ;如果DH中的数小于BL中,将BL中的数赋给DH NEXT1: INC SI ;偏移地址加1 LOOP NEXT;循环,CX自减一直到0,DH中存数组的最大值 ;接下来的程序是将将最大值DH在屏幕上显示输出 MOV BX,02H NEXT2: MOV CL,4 ROL DH,CL ;将DH循环右移四位

C语言程序设计-----阅读程序题库及答案

C语言程序设计-----阅读程序题库及答案 集团文件发布号:(9816-UATWW-MWUB-WUNN-INNUL-DQQTY-

阅读程序题 【】以下程序的输出结果是。 main(D ) { float a; printf("%g",a); } A) +00 B) C) D) 0 【】下面程序的输出结果是B____。 #include <> main( ) { int x=10; { int x=20; printf ("%d,", x);

} printf("%d\n", x); } A) 10,20 B) 20,10 C) 10,10 D) 20,20 【】以下程序的输出结果是___B_。 main() { unsigned int n; int i=-521; n=i; printf("n=%u\n",n); }s",s); } A) a book! B) a book!<四个空格》 C) a bo D) 格式描述错误,输出不确定

【】下面程序的输出结果是____。 main() { int a,b; scanf("%2d%3d",&a,&b); printf("a=%d b=%d\n",a,b); } A) a=12 b=34 B) a=123 b=45 C) a=12 b=345 D) 语句右错误 【】以下程序段的输出结果是。 int a=10,b=50,c=30; if(a>b) a=b; b=c; c=a; printf("a=%d b=%d c=%d\n",a,b,c);

A) a=10 b=50 c=10 B) a=10 b=30 c=10 C) a=50 b=30 c=10 D) a=50 b=30 c=50 【】以下程序的输出结果是。 main() { int a=0,b=1,c=0,d=20; if(a) d=d-10; else if(!b) if(!c) d=15; else d=25; printf("d=%d\n",d); } A) d=10 B) d=15 C) d=20 D) d=25 【】下面程序的输出结果为。 main()

微机原理与接口技术实验报告-全实例代码

实验一上机练习 实验目的: 1、掌握用编辑软件编辑程序文本的方法。在DOS环境下,熟练掌握用MASM5.0宏汇编程序对ASM文件进行编译、连接等操作步骤。 2、熟悉用DEBUG调试程序。 实验要求: 选取教科书中一典型例题,用编辑软件在PC机中形成ASM文件,然后编译、连接,生成目标文件和可执行文件。再用DEBUG程序进行调试。 实验步骤: 实验程序如下: data segment ary1 db 12,34,45,56,67,78,89,90,18 cont1 equ $-ary1 ;ary1的长度 sum1 dw ? ary2 db 13h,24h,57h,68h,9ah,0bch,0cdh,0deh,80h,50h cont2 equ $-ary2 sum2 dw ? data ends code segment assume cs:code, ds:data

start: mov ax,data mov ds,ax lea si,ary1 mov cx,cont1 ;设定循环次数为ary1的个数 call sum lea si,ary2 mov cx,cont2 call sum mov ah,4ch ;结束程序功能调用4CH int 21h sum proc ;求和程序段,求该段所有数之和xor ax,ax ;ax清零为下面加法准备 next1: add al,[si] adc ah,0 inc si loop next1 mov [si],ax ret ;返回调用程序 sum endp ;程序段结束 code ends end start

点击“运行”点击“编译成目标文件”,编译成功后,再“运行”=〉“生成可执行文件”,然后运行,即可。 运行成功以后,可进行调试。点击工具栏的调试按钮,出现调试框。其命令如下:输入a,进行逐行汇编,输入c,比较两内存块,输入d,内存信息以16进制显示;输入e,修改内存指定的字节;输入f,可以预置一段内存;输入g,执行程序;输入h,制算术运算;输入i,从指定端口地址输入;输入l,读盘;输入m,内存块传送;输入n,置文件名;输入o,从指定端口地址输出;输入q,结束DEBUG调试;输入r,显示和修改寄存器;输入s,查找字节串;输入t,跟踪执行;输入u,反汇编;输入w,存盘操作。 实验总结: 1、通过实验,熟悉了MASM环境,了解了程序书写,编译和运行的方法。 2、实验过程中,在调试的时候,各调试命令的用法十分复杂,如指令P,单输入p只会执行一步,若要一次执行多步,可以在后面加上数字。通过练习,熟悉了各调试指令。 实验二两个多位十进制数相加 实验目的: 1、学习数据传送和算术运算指令的用法。 2、熟悉在PC机上建立、汇编、连接、调试和运行汇编语言程序过程。

C++程序设计综合练习题-读程序写结果题

C++程序设计模拟题 三、用C++语言描述下列命题 1、A小于B并且A大于C 2、A和B中有—个小于C 3、A是奇数 4、B和C中较大者与A相等 5、年份Y是闰年 四、写出下列程序的执行结果 1. #include void main() { int b[3][5]={11,12,13,14,15,21,22,23,24,25,31,32,33,34,35}; int (*p)[5]; p=b; for(int j=0;j<5;j++) cout<<*(*p+j)<< "," ; cout< void swapl(int a,int b) { int temp=a; a=b; b=temp; } void swap2(int*a,int*b) { int temp=*a; *a=*b,*b=temp; } void swap3(int*a,int*b) { int*temp=a; a=b,b=temp; } void swap4(int &a,int &b)

int temp=a; a=b; b=temp; } void main() { int a=10,b=20; swapl(a,b); cout< void print(int w) { int i; if(w!=0) { print(w-1); for(i=1;i<=w;i++) cout< #define sw(x,y) {x^=y;y^=x;x^=y;} void main() { int a=10,b=01; sw(a,b); cout<

java课程设计聊天小程序

java课程设计聊天小程序

课程设计指导书 姓名学 号 班 级 一 班 课程名称Java课程设计课程性质 设计时间2010年11月4日——2010年12月31日设计名称聊天小程序 设计目的本次课程设计是对前面学过的面向对象的编程思想以及编程方法的一个总结、回顾和实践。开始设计前学生一定要先回顾以前所学的内容,明确本次设计所要用到的技术点并到网上搜索以及查阅相关的书籍来搜集资料。通过编写一个基于JA V A的应用系统综合实例,来掌握Java语言编程技巧。 设计要求1、使用图形用户界面。 2、能实现一个聊天室中多人聊天。 3、可以两人私聊。

计划与进度计划在两个月内完成任务,首先在前半个月内(11月4日--11月19日),构思通过网上(图书馆)的知识与课本上的相关内容的了解与认识,确认好选择的课题与怎样设计,基本的思路想好。十五天(11月19日--12月5日)内参考资料争取完成服务端的程序,在12月5日--12月20日完成客户端的程序设计,在12月20日—12月30日内完成实现报告的填写工作。在12月31日全面完成整个课题,并上交给老师。 任课教师意见备注

课程设计报告 课程: 学号: 姓名: 班级 教师: 时间

计算机科学与技术 设计名称:聊天小程序日期:2010 年 11月 4 日 设计内容:设计一个在图形界面下,实现一个聊天室中多人聊天,也可以私聊的聊天小程序 设计目的与要求:目的是为了更好的掌握java 这门课程的内容,同时更好的理解与掌握socket 编程,对所有面向对象的编程思想以及编程方法的一个总结、回顾和实践,掌握Java语言编程技巧。要求使用图形用户界面。能实现一个聊天室中多人聊天。可以两人私聊。(提示:使用socket通信)程序描述清晰准确,思路清晰,程序能够实现相应的功能。

微机原理实验五输入与输出程序设计

实验六输入与输出程序设计 一、实验目的 1?掌握常用DOS中断调用的功能以及在应用程序中的使用方法。 2?学习键盘输入和屏幕输出的基本方法。 3?宏指令、子程序在应用程序屮的使用。 4?汇编语言程序设计的调试与完善。 二、设计指标与实验要求 1.设计内容 本实验要求设计完成:①屏幕输出提示(如〃Want in put (Y/N)? ”),若键入N则结束程序返回操作系统;键入Y则转2步;键入的是其它字母则回①步。②换行后输出提示(如"please in put a strings :”),且在该提示后键入一字符串(输入到输入缓冲区) ③换行后输出提不(如"your in putt ing is :”),在该提不后输出由②步输入的字符串。 ④换行后输出提示“Want continue (Y/N)? ” ,若键入Y则转②步;键入N则结束程序返回操作系统;其它字母则回第④步。 2 ?设计要求 ①按屏幕提示要求输入,从屏幕上获得正确结果。 ②把程序屮常用的屮断调用定义成宏指令(至少定义2个)。 ③字符串回显部分设计成子程序,可以选择用21H中断的2号或9号功能来实现,应能显示由 主程序指定的任一字符串。要注意这两种方法实现的设计过程是不同的。 采用2号功能的,子程序输入参数为“回显字符串地址”和“回显字符数”;采用 9号功能的,子程序输入参数为“回显字符串地址”。 ④屏幕的提示信息显示格式尽量做到兼顾美观。

3 .实验步骤 ①?选用合适的程序文本编辑软件编辑源程序, 并为文件取以.ASM为扩展名的文件存盘。 ②?用宏汇编软件MASM对源程序文件进行汇编,若有错误,根据提示(行号,错误类型)回源程序文件中修改。 ③?用LINK对由MASM匚编后产生的目标文件做连接,生成可执行文件;若有错误(同上)回步骤1修改源程序文件。 ④?对存在问题的程序,用CV调试程序,检察运行结果,并调试程序。 ⑤?反复验正程序的正确性。 ⑥?完善、改进所设计的程序算法、功能、界面、或性能等指标。 四、思考题 1.输入串若以指定字符(非回车)做结束标志时的输入部分应如何改写。 2.若为应用程序添加启动时的密码检验功能,密码输入时采用什么屮断功能比较合适? 3.如何为应用程序添加字母的大小写转换功能? OUTPUT MACRO MOV AH, 9 INT 21H EXDM INPUTS MACRO MOV AH, 10 INT 21H ENDM DATA SEGMENT BUF1 DB Odh, Oah,,Wa nt in put(Y/N)?$, BUF2 DB Odh,Oah, 5 please in put a stri ngs:$' BUFIN DB 20,?,20 DUP(?) BUF3 DB Odh,Oah, ' your in putt ing is:$' BUF4 DB Odh, Oah,,Wa nt contin ue(Y/N)?$,

三、程序阅读题答案

三、程序阅读题(每题4分,共16分) 1.输入elephant后,下列程序的输出结果是_______。 # include void main() { int i=0, k, ch; static int num[5]; char alpha[ ]={'a', 'e', 'i', 'o', 'u'}, in[80]; gets(in); while(in[i]){ for(k=0; k<5; k++) if(in[i] == alpha[k]) { num[k]++; break; } i++; } for(k=0; k<5; k++) if(num[k]) printf("%c%d", alpha[k], num[k]); printf("\n"); } 2.下列程序的输出结果是_______。 #include v oid f(int n) {if(n<0) { putchar('-'); n = -n; } if(n/10) f(n/10); putchar(n%10+'0'); } main() { f(-610); } 3.输入0 10 2 7后,下列程序的输出结果是_______。 #include v oid p(int v[]) {int i, k, temp; for (i=1; i<4; i++) for(k=i-1; k>=0 && v[k]

v[k+1]=temp; } } main() {int k, a[4]; for(k=0; k<4; k++) scanf("%d", &a[k]); p(a); for(k=0; k<4; k++) printf("%d ", a[k]); } 4. 下列程序编译后生成t.exe, 运行t input output zoo oil 的输出结果是_______。 void main(int argc, char * argv[ ]) { int k; char *p=argv[1]; for(k=2; k0) p=argv[k]; printf("%s\n", p); } 四、程序填空题(每空2分,共20分) 1.验证哥德巴赫猜想:任何一个大于6的偶数均可表示为两个素数之和。要求将6~100之 间的偶数都表示成两个素数之和。素数指只能被1和自身整除的正整数,1不是素数,2是素数。 #include i nt prime(int n) /* 判断n是否为素数*/ {int k; for (k=2; k<=n/2; k++) if (n%k==0) return 0; return (1) ; } m ain() {int i, k; for (i=6 ; i<=100; i+=2) for (k=2; k<=i/2; k++) if ( (2) ) { printf("%d = %d +%d\n", i, k, i-k); break; } } 2.下列程序调用swap函数交换a和b的值,并输出交换后的a和b的值。程序的输出结果是: After swap 5, 3。 v oid main() {

相关主题
文本预览
相关文档 最新文档