100字范文,内容丰富有趣,生活中的好帮手!
100字范文 > 汇编语言编程题总结(特别适用河北专接本)

汇编语言编程题总结(特别适用河北专接本)

时间:2022-03-24 22:37:55

相关推荐

汇编语言编程题总结(特别适用河北专接本)

专接本交流群:1051749714 (有什么问题欢迎进群讨论)

汇编语言的编程题

如有不足,还望大佬们指教

汇编语言基本框架

1 内存中交换两个数的位置

2比较两个数的大小(求最大,求最小)

3 计算A+B=C

4求1-100的和,存入SUM单元

5 求内存中正负零的个数

6 求十个数的最大值

7 统计键盘输入的大写字母的个数,回车符结束

8 DOS功能调用的示例

9 求1-100之间奇数的和

10 求大小写转换

11 把AL的值乘10(不用MUL)

12 统计AL寄存器中1的个数(相当于AL里面数二进制中1的个数),并屏幕显示

汇编语言基本框架(考试时,当你实在不会写的时候,把基本框架写上会有基本框架的分数)

注:汇编语言的注释是 ; 分号 其他语言一般是 //

DATAS SEGMENT;数据段;此处输入数据段代码 DATAS ENDSCODES SEGMENT;代码段ASSUME CS:CODES,DS:DATAS;数据段给DS,代码段给CSSTART:;开始代码MOV AX,DATAS;需要先把DATA给AX寄存器,然后再从AX给DS,DATA不能直接给DSMOV DS,AX;此处输入代码段代码MOV AH,4CH;结束语句INT 21HCODES ENDS;代码段结束END START;结束代码

1 内存中交换两个数的位置

DATA SEGMENT A DB 12H;定义两个变量B DB 24HDATA ENDS CODES SEGMENT ASSUME DS:DATA,CS:CODESSTART:MOV AX,DATAMOV DS,AXMOV AL,A;把A->ALMOV BL,B;B->BLMOV A,BL;BL->AMOV B,AL;AL->BEXIT:MOV AH,4CHINT 21HCODES ENDSEND START

2比较两个数的大小(求最大,求最小)

DATA SEGMENT A DB 12H;定义两个变量B DB 24HDATA ENDS CODES SEGMENT ASSUME DS:DATA,CS:CODESSTART:MOV AX,DATAMOV DS,AX;A里面放最大值,B里面放最小值MOV AL,A;把A->ALCMP AL,B;比较A和B的大小JG EXIT;如果A大于B,就跳转到EXITMOV BL,B;如果A小于B,就交换AB的位置MOV A,BLMOV B,ALEXIT:MOV AH,4CHINT 21HCODES ENDSEND START

3 计算A+B=C

DATA SEGMENT A DB 12H;定义三个变量B DB 24HC DB 0DATA ENDS CODES SEGMENT ASSUME DS:DATA,CS:CODESSTART:MOV AX,DATAMOV DS,AXMOV AL,A;把A放入ALADD AL,B;AL+B (结果是默认放入AL的)MOV C,AL;把AL放入CEXIT:MOV AH,4CHINT 21HCODES ENDSEND START

4求1-100的和,存入SUM单元

DATA SEGMENT SUM DW 0;这里就把SUM定义成字类型,字节类型放不开DATA ENDS CODES SEGMENT ASSUME DS:DATA,CS:CODESSTART:MOV AX,DATAMOV DS,AXMOV AX,0;用AX当作和存放的地方,先把AX清0MOV BX,1;BX当作每次加的数MOV CX,100;CX当作循环次数LOP:ADD AX,BX;把BX加AX放到AX当中INC BX;BX每次加1LOOP LOP;循环LOP,LOP的循环次数由CX决定MOV SUM,AX;EXIT:MOV AH,4CHINT 21HCODES ENDSEND START

5 求内存中正负零的个数

DATA SEGMENT BUF DB 2,-5,6,-8,0,0,1,-9,5,4;定义了十个变量PLUS DB 0;存放正负零的个数MINUS DB 0ZERO DB 0DATA ENDS CODES SEGMENT ASSUME DS:DATA,CS:CODESSTART:MOV AX,DATAMOV DS,AXMOV BX, OFFSET BUF;将BUF变量的偏移地址放到BXMOV CX,10;循环10次,LOP:MOV AL,[BX];把偏移地址为BX的变量放到ALCMP AL,0;和0比较JGE LOP1;大于等于的时候跳转到LOP1INC MINUS;小于的时候就是负数了,MINUX加一JMP LOP3;跳转到LOP3LOP1:CMP AL,0;大于0就跳转到LOP2JG LOP2INC ZERO;等于0就是0了,ZERO加1JMP LOP3;跳转到LOP3LOP2:INC PLUS;正数+1LOP3:LOOP LOP;继续循环EXIT:MOV AH,4CHINT 21HCODES ENDSEND START

6 求十个数的最大值

DATA SEGMENT BUF DB 2,-5,6,-8,0,0,1,-9,5,4;定义了十个变量DATA ENDS CODES SEGMENT ASSUME DS:DATA,CS:CODESSTART:MOV AX,DATAMOV DS,AXMOV BX, OFFSET BUF;将BUF变量的偏移地址放到BXMOV CX,9;循环9次,因为把第一个值放到ALMOV AL,[BX]INC BXLOP:CMP AL,[BX];把AL和BUF里面的值比较JG LOP2;AL大的话,就直接跳过MOV AL,[BX];AL小,就把当前的值给ALLOP2:INC BX;每次都把BX+1,用来取下一个数LOOP LOP;继续循环EXIT:MOV AH,4CHINT 21HCODES ENDSEND START

7 统计键盘输入的大写字母的个数,回车符结束

DATA SEGMENT DATA ENDS CODES SEGMENT ASSUME DS:DATA,CS:CODESSTART:MOV AX,DATAMOV DS,AXMOV CL,0;用CL保存大写字母的个数LOP:MOV AH,01H;cmd键盘输入字符固定格式INT 21HCMP AL,0DH;匹配是不是回车 回车的值是ODHJZ EXIT;如果是回车,就直接退出CMP AL,'A';如果小于A,就下一次循环JL LOP2CMP AL,'Z';大于Z就下一次循环JG LOP2INC CL;如果大写字母就把CL+1LOP2:LOOP LOP;继续循环EXIT:MOV AH,4CHINT 21HCODES ENDSEND START

8 DOS功能调用的示例

字符输入输出

DATA SEGMENT DATA ENDS CODES SEGMENT ASSUME DS:DATA,CS:CODESSTART:MOV AX,DATAMOV DS,AXMOV AH,01H ;键盘输入的时候,给AH 1INT 21H ;然后INT 21H调用,默认输入到AL中MOV DL,AL ;CMD窗口输出的时候,要把输出的放到DL中MOV AH,02H ;给AH 2INT 21HEXIT:MOV AH,4CHINT 21HCODES ENDSEND START

字符串输入输出

DATA SEGMENT BUF DB 20 DUP('$')BUFF DB 'Hello World!$'DATA ENDS CODES SEGMENT ASSUME DS:DATA,CS:CODESSTART:MOV AX,DATAMOV DS,AXMOV DX,OFFSET BUF;把偏移地址给DX,也可以用 LEA DX,BUF 二者皆可MOV AH,0AH ;键盘输入的时候,给AH 10INT 21H ;然后INT 21H调用,默认输入到BUF中MOV DX,OFFSET BUFF ;CMD窗口输出的时候,要把输出偏移地址放到DX中MOV AH,09H ;给AH 2INT 21HEXIT:MOV AH,4CHINT 21HCODES ENDSEND START

9 求1-100之间奇数的和

DATA SEGMENT DATA ENDS CODES SEGMENT ASSUME DS:DATA,CS:CODESSTART:MOV AX,DATAMOV DS,AXMOV AX,0;用来存奇数和MOV BX,1;用来当加的量MOV CX,100;用来控制循环次数LOP:TEST BX,01H;如果是偶数,那么&1肯定是0,如果是奇数&1为1JZ LOP2;偶数就跳过ADD AX,BX;把BX加到AXLOP2:INC BX;BX每次加1LOOP LOP;循环EXIT:MOV AH,4CHINT 21HCODES ENDSEND START

10 求大小写转换

这里提供两种方法,A的ASCII的值是65,也就是41H a的ASCII的值是97,也就是61H我们利用ASCII的差值之间,差20H 直接异或20H就可以 20H比较特殊,他是二进制0010 0000 直接异或就可以,这一位是0的话就变成1了,也就是加上20H了这一位是1的话,异或后就变成0了,也就是减去20H了

DATA SEGMENT BUF DB 'A'DATA ENDS CODES SEGMENT ASSUME DS:DATA,CS:CODESSTART:MOV AX,DATAMOV DS,AXMOV AL,BUFXOR AL,20HMOV BUF,ALEXIT:MOV AH,4CHINT 21HCODES ENDSEND START

普通比较法

DATA SEGMENT BUF DB 'A'DATA ENDS CODES SEGMENT ASSUME DS:DATA,CS:CODESSTART:MOV AX,DATAMOV DS,AXMOV AL,BUFCMP AL,'a';比a大就跳转到LOP2JGE LOP2CMP AL,'A';看看是不是大于A小于ZJL EXITCMP AL,'Z'JG EXITADD AL,20H;是字母的话就加上20HJMP EXITLOP2:CMP AL,'z';看看是不是大于a小于zJG EXITSUB AL,20H;是字母就减去20HEXIT:MOV BUF,ALMOV AH,4CHINT 21HCODES ENDSEND START

11 把AL的值乘10(不用MUL)

DATA SEGMENTDATA ENDS CODES SEGMENT ASSUME DS:DATA,CS:CODESSTART:MOV AX,DATAMOV DS,AXMOV AL,1;给AL赋值1SHL AL,1;二进制左移一位,也就是乘2放进ALMOV BL,AL;把AL放进BL,MOV CL,2;把2放进CL,左移右移操作大于1位的都要放到CL里面SHL AL,CL;二进制左移两位,也就是AL左移了三位也就是乘8ADD AL,BL;再把BL加上AL也就是2倍加8倍。也就是乘10了EXIT:MOV AH,4CHINT 21HCODES ENDSEND START

12 统计AL寄存器中1的个数(相当于AL里面数二进制中1的个数),并屏幕显示

DATA SEGMENTDATA ENDS CODES SEGMENT ASSUME DS:DATA,CS:CODESSTART:MOV AX,DATAMOV DS,AXMOV AL,33H;赋值MOV BL,0;BL用来记录1的个数LOP:TEST AL,01H;看看最后一位是不是1,如果是1就计数JZ LOP2;不是1就跳转到LOP2INC BL LOP2:SHR AL,1;右移1位,如果这个数是0了,就退出JZ EXIT;右移,最后一位会去掉,最高位会补零JMP LOP;还有数的话,就继续循环EXIT:MOV DL,BL;把BL计数的值放到DL,输出到屏幕MOV AH,02HINT 21HMOV AH,4CHINT 21HCODES ENDSEND START

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。