【汇编语言】典型例题及代码 您所在的位置:网站首页 汇编语言问题79答案 【汇编语言】典型例题及代码

【汇编语言】典型例题及代码

2023-11-11 20:49| 来源: 网络整理| 查看: 265

文章目录 判断字符串中是否有数字找出数组中第一个负数小写转大写比较数组对应位并分大小存放排序冒泡排序

判断字符串中是否有数字

题目描述 在STR到STR+99单元中存放着一个字符串,试编写程序测试该字符串中是否有数字,若有将CL置1,否则CL置0。 代码及注释

DATA SEGMENT STR DB 'abc2uuuk_o$' ;字符串存入STR中 LEN EQU $-STR DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START:MOV AX,DATA MOV DS,AX XOR CX,CX ;清空CX MOV CL,LEN ;将字符串长度存入CX MOV BL,100 CMP CL,BL ;比较CL和100,因为题目要求STR到STR+99,若长度大于100,则需要将长度置为100 JB X ;长度大于100则跳转,直接进行后续操作,否则把100存入CL XOR CX,CX MOV CL,100 ;100存入CL代替LEN X:MOV SI,-1 ;SI作为指针,存入-1 NUMBER:INC SI ;SI加一 MOV BL,30H CMP STR[SI],BL ;看字符的ASCII码是否大于等于0的ASCII码 JAE NEXT ;大于则跳转 LOOP NUMBER ;不是则不是数字,检查下一个字符串 MOV CL,0 ;运行到最后都不是,则CL置0 JMP EXIT NEXT:MOV BL,39H CMP STR[SI],BL ;看字符的ASCII码是否小于等于9的ASCII码 JBE LAB1 ;是则说明就是字符就是数字,可以将CL置1跳出程序 LOOP NUMBER ;不是则不是数字,检查下一个字符串 LAB1:XOR CX,CX MOV CL,1 ;是数字会跳转到此处,CL置1 EXIT:MOV AH,4CH INT 21H CODE ENDS END START 找出数组中第一个负数

题目描述 在字节数组中找出第一个负数,并将该负数存入RES单元中;假设该数组中包含20个带符号数,且至少有1个负数。 代码及注释

DATA SEGMENT RES DB ? BUF DB 2,3,9,-4,8,6,0,3,-3,-4,8,7,9,2,3,5,-9,4,5,8 COUNT EQU 20 ;题目要求20个带符号数,直接存诚20 DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START:MOV AX,DATA; MOV DS,AX MOV SI,OFFSET BUF; ;SI作为指针 XOR AX,AX LOP:MOV AL,[SI] MOV BL,0 CMP AL,BL ;比较当前数和0 JL STORE ;有符号数比较,若当前数为负数,跳转 INC SI JMP LOP ;题目要求一定有至少一个负数,所以可以使用无条件跳转 STORE:MOV RES,AL ;将AL,即负数的当前数存入RES MOV AH,4CH INT 21H CODE ENDS END START 小写转大写

题目描述 试编写一个汇编程序,能对键盘输入的小写字母用大写字母显示出来(要求采用子程序格式,即采用子程序完成将小写字母转化成大写字母)。

代码及注释

DATA SEGMENT MESSAGE DB 'This is not a lower case letter.',13,10,'$' ;不是小写字母的提示信息 DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START:MOV AX,DATA MOV DS,AX MOV AH,01 INT 21H ;输入字符结束 MOV BL,97 CMP AL,BL ;比较输入字符与a的ASCII码 JB EXIT ;输入字符不是小写字母则跳转到退出位置 MOV BL,122 CMP AL,BL ;比较输入字符与z的ASCII码 JA EXIT ;输入字符不是小写字母则跳转到退出位置 MOV BL,AL MOV BH,0 CALL NEXT ;已判断是小写字母则调用子程序 MOV AH,4CH INT 21H EXIT:MOV AH,9 ;不是小写字母则输出不是的提示 MOV DX,SEG MESSAGE MOV DS,DX MOV DX,OFFSET MESSAGE INT 21H MOV AH,4CH ;中断程序 INT 21H NEXT:MOV AL,32 ;小写变大写子程序 SUB BL,AL ;大小写字母之间ASCII码相差32,输入字符ASCII-32得到大写字母 MOV DL,BL MOV AH,02 INT 21H ;输出字符 RET CODE ENDS END START 比较数组对应位并分大小存放

题目描述 有2个数组: ary1 db 12,-35,0,126,-90,-5,68,120,1,-19 ary2 db 24,25,0,-38,-89,99,68,100,2,-20 比较两个数组的对应位,将大的数放在ary1数组中,小的数放在ary2中(要求采用子程序格式)

代码及注释

DATA SEGMENT ARY1 DB 12,-35,0,126,-90,-5,68,120,1,-19 ARY2 DB 24,25,0,-38,-89,99,68,100,2,-20 LEN EQU $-ARY2 DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START:MOV AX,DATA MOV DS,AX MOV SI,OFFSET ARY1 ;SI作为ARY1指针 MOV DI,OFFSET ARY2 ;DI作为ARY2指针 LOP:MOV AL,[SI] CMP AL,[DI] ;比较ARY1与ARY2中对应位置的值 JG NEXT ;若ARY1中值大直接跳转,进入下一步,否则需要交换 CALL FUN ;调用子程序进行两数组中值交换 NEXT:INC SI INC DI ;指针后移 CMP SI,LEN JNZ LOP ;若SI没到最后则跳转 MOV AH,4CH INT 21H FUN:MOV BL,[DI] ;子程序,用于交换两数组中的值 MOV [DI],AL MOV [SI],BL RET CODE ENDS END START 排序

题目描述 数据按字节存储,按降序排序,实现排序。 排序方法图示如下: 排序

代码及注释

DATA SEGMENT A DB 12,11,5,9,3 DB 18,4,1,7,2 CNT EQU $-A DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START:MOV AX,DATA MOV DS,AX MOV CX,CNT-1 ;CX置为初始循环次数 MOV BX,0 LOOP1:MOV DX,CX MOV SI,1 ;因为改为DB,SI初始为1 LOOP2:MOV AL,A[BX] CMP AL,A[BX+SI] ;比较两值 JNB L1 ;大于等于则直接跳转,进行后续步骤 XCHG AL,A[BX+SI] MOV A[BX],AL ;否则交换两值 L1:INC SI ;改为DB,SI每次增加1 LOOP LOOP2 ADD BX,1 ;改为DB,BX每次增加1 MOV CX,DX ;细节注意,内循环,即LOOP2的循环次数每次都会减小1,而CX在经过下一个语句LOOP LOOP1时已经回减小1,再存入DX,再下一次取出时又被减小1,以此来实现每次CX都逐渐减小 LOOP LOOP1 MOV AH,4CH INT 21H CODE ENDS END START 冒泡排序

代码及注释

DATA SEGMENT A DW 1223,83,456,355,89 DW 948,5,123,789,567 CNT EQU ($-A)/2 DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START:MOV AX,DATA MOV DS,AX MOV CX,CNT-1 LOOP1:MOV DX,CX MOV SI,0 ;每次排序都是从头开始的 LOOP2:MOV AX,A[SI] ;比较当前值与其下一个数 CMP AX,A[SI+2] JNA L1 ;小于等于,即这两个数的顺序是递增的则跳转,直接进行后续操作 XCHG AX,A[SI+2] ;否则交换两值 MOV A[SI],AX L1:ADD SI,2 ;LOOP2内循环中每次SI向后一位 LOOP LOOP2 MOV CX,DX ;实现细节与题目四中相同 LOOP LOOP1 MOV AH,4CH INT 21H CODE ENDS END START


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有