微机原理程序题

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

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 io32.inc

.data

Lyear dword 100 dup(?)

Lcounter dword 0

.code

mainproc

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 d ispuid ;输出,用于验证。可以删掉

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

ret

mainendp ;end of main

end main ;end of assembly

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

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

; 1. i=2 to 100 do

; 1.1 if i is prime number then print i

; 细化1.1 如下:

; 1.1 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 io32.inc

.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

mainproc ;主程序开始

mov esi,0

mov eax,offset msg

call d ispmsg

mov ebx,2

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

ja done

mov ecx,ebx

shr ecx,1 ;j=i/2

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

相关文档
最新文档