微机原理及应用A试题库及答案修改版 - 图文

; left,right分别指向数组的第一个和最后一个元素,采用首尾交换。 ; 1. left=0,right=n-1 ; ; 2. while left

; 2. for i=1 to n-1 do ; 2.1 if maxa[i] then min=a[i] ; 合理分配寄存器:采用loop循环,ecx=lengthof array -1 ; max=eax=a[0],min=ebx=a[0]; ; esi=1,做下标,采用带比例因子的相对寻址处理数组。 .686 .model flat,stdcall option casemap:none includelib msvcrt.lib printf PROTO C : dword,:vararg .data array dword 12,4,-168,122,33,56,78,99,345,-66,-5 max dword ? min dword ? fmtStr byte ' max=%d min=%d',13,10,0 ;格式描述串 .code main proc mov ecx,lengthof array -1 mov eax,array[0] ;eax:max mov ebx,eax ;ebx:min mov esi,1 ;数组下标 again: cmp eax,array[esi*4] jge small ;if max= small: cmp ebx,array[esi*4] jle next mov ebx,array[esi*4] next: inc esi loop again mov max,eax mov min,ebx invoke printf,offset fmtStr,eax,ebx ret ;return to Windows main endp ;end of main end main ;end of assembly 5. 编程写一个完整的程序统计msg中的空格的个数与小写字母的个数,并分别将它们存入space单元与char单元中。数据段的定义如下: .data msg byte 'I love XUT !',13,10,0 space dword ? 24

lowercase dword ? ; Win32 Console Application ; 统计msg串中的空格的个数与小写字母的个数, ; 并分别将它们存入space单元与lowercase单元中。 ; 目的:学习简单的关于分支与数组处理的算法。 ; 学习 if ('a'<= a[i])&&(a[i]<='z') lowercase++;中 ; 逻辑与表达式在汇编语言中的实现。 ; 算法描述 ; 1. space=lowercase=0; ; 2. for i=0 to n-1 do ; 2.1 if a[i]==' ' then space++; ; 2.2 if 'a'<= a[i] <='z' then lowercase++; ; 合理分配寄存器:采用loop循环,ecx=lengthof msg-1 ; space=eax=0,lowercase=ebx=0,esi=offset msg,做指针 .686 .model flat,stdcall option casemap:none includelib msvcrt.lib printf PROTO C : dword,:vararg .data msg byte 'I love XUT !',13,10,0 space dword ? lowercase dword ? fmtStr byte ' space=%d lowercase=%d',13,10,0 ;格式描述串 .code main proc mov ecx,lengthof msg-1 xor eax,eax ;space=eax=0 mov ebx,eax ;lowercase=ebx=0 mov esi,offset msg ;指向msg首地址 again: mov dl,[esi] cmp dl,' ' jnz letter ;if a[i]==' ' then space++; inc eax ;注意:转换成汇编语言时,测试的是不是空格时则转去测试字母。 letter: cmp dl,'a' jb next ;注意:测试的是a[i]<'a'。 cmp dl,'z' ja next ;注意:测试的是a[i]>'z'。 inc ebx ;lowercase++ next: inc esi ;指向下一个字符 25

loop again mov space,eax mov lowercase,ebx invoke printf,offset fmtStr,eax,ebx ret ;return to Windows main endp ;end of main end main ;end of assembly 6. 编程写一个完整的程序,将字符串msg中所有的小写字母转换为大写字母。数据段的定义如下: .data msg byte 'I love XUT !',13,10,0 ; Win32 Console Application ; 将字符串msg中所有的小写字母转换为大写字母 ; 目的:学习简单的关于分支与数组处理的算法。 ; 学习 if ('a'<= a[i])&&(a[i]<='z') a[i]=a[i]-0x20;中 ; 逻辑与表达式在汇编语言中的实现。 ; 算法描述 ; 1. for i=0 to n-1 do ; if 'a'<= a[i] <='z' then a[i]=a[i]-20H; ; 小写字母与大写字母的ASCII码的差值为20H, 也可以用 ; a[i]=a[i]&0x5f ; 合理分配寄存器:采用loop循环,ecx=lengthof msg-1 ; esi=offset msg,做指针。 .686 .model flat,stdcall option casemap:none includelib msvcrt.lib printf PROTO C : dword,:vararg .data msg byte 'I love XUT !',13,10,0 fmtStr byte 'msg: %s',13,10,0 ;格式描述串 .code main proc mov ecx,lengthof msg-1 mov esi,offset msg ; 指向msg首地址 again: mov dl,[esi] cmp dl,'a' jb next ; 注意:测试的是a[i]<'a'。 cmp dl,'z' ja next ; 注意:测试的是a[i]>'z'。 26

联系客服:779662525#qq.com(#替换为@)