汇编复习Test5
来源:互联网 发布:机械加工工艺编程员 编辑:程序博客网 时间:2024/06/11 16:58
1.编一个程序,从键盘输入一个不长于120个字符的串(回车键结束),然后将其中的字母字符显示输出(在显示输出前,补充输出回车换行)。DATAS SEGMENT BUF DB 120 DUP(?)DATAS ENDSSTACKS SEGMENT ;此处输入堆栈段代码STACKS ENDSCODES SEGMENT ASSUME CS:CODES,DS:DATAS,SS:STACKSSTART: MOV AX,DATAS MOV DS,AX MOV SI,offset BUFAG: MOV AH,01H INT 21H CMP AL,0Dh JE EXIT MOV [SI],AL inc si JMP AGEXIT: MOV [SI],AL MOV AH,02H MOV SI,offset BUFAG1: mov dl,[si] INT 21H CMP AL,0Dh JE EXIT1 inc si JMP AG1EXIT1: MOV AH,4CH INT 21HCODES ENDS END START2.编一个程序完成从键盘上输入一个4位的16进制数,并以八进制形式显示出来。DATAS SEGMENT num dw 1000h,100h,10h,1hDATAS ENDSSTACKS SEGMENT ;此处输入堆栈段代码STACKS ENDSCODES SEGMENT ASSUME CS:CODES,DS:DATAS,SS:STACKSSTART: MOV AX,DATAS MOV DS,AX MOV SI,OFFSET num MOV CX,4 MOV BP,0input: MOV AH,01H INT 21H CMP AL,39H JBE less SUB AL,7Hless: SUB AL,30h MOV AH,0 MOV BX,[SI] mul BX ADD BP,AX ADD SI,2loop input rol bp,1 mov dx,bp and DL,01H add dl,30h mov ah,02h INT 21H mov cx,5output: push cx mov cl,3 rol bp,cl mov dx,bp and DL,07H add dl,30h mov ah,02h INT 21H pop cxloop output MOV AH,4CH INT 21HCODES ENDS END START3. 在首地址为DATA的字数组中,存放了100H个16位无符号数,编一个子程序,找出其中的最小数,并存入AX寄存器中返回。4. 已知数据块BUF中存放3个字节数据,是编写一个程序判断这3个数的关系:如果3个数相等,则显示“All equal.”;如果有任意两个数相等,则显示“Only two equal.”;如果三个数各不相同,则显示“All three different from each other.”。DATA SEGMENT BUF DB 1,2,3 ;三个数据 DISP1 DB 'ALL EQUAL$' DISP2 DB 'ONLY TWO equal$' DISP3 DB 'ALL THREE DIFFRENT FROM EACH OTHER$'DATA ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATAmain proc farSTART:MOV AX,DATA MOV DS,AX MOV SI,OFFSET BUF ;地址指针 MOV AX,[SI] CMP AX,[SI+2] ;第一个数比第二个数 JNZ L1 ;1,2不相等则跳转 CMP AX,[SI+4] ;接上面,1,2相等的话比较1,3 JNZ L2 LEA DX,DISP1 ;不相等则跳转,显示两个相等 CALL PRINT1 ;否则全相等,调用子程序显示 JMP QUITL1:CMP AX,[SI+4] ;此处是在1,2不相等的条件下比较1,3 JZ L2 ;相等的话即有两个相等跳转至L2(显示DISP2) MOV AX,[SI+2] CMP AX,[SI+4] ;1,3不相等,1,2不相等,比较2,3 JZ L2 LEA DX,DISP3 ;2,3相等的话也是两个相等,同样跳转至L2 CALL PRINT1 ;否则没有相等的,调用子程序显示disp3 JMP QUITL2: LEA DX,DISP2 CALL PRINT1QUIT:MOV AX,4C00H INT 21Hmain endp ; ;子程序部分 PRINT1 PROC MOV AH,09H INT 21H ;调用功能显示都相等 RET PRINT1 ENDP CODE ENDSEND START5.Link指向一个字线性表,其中的首单元保存线性表的长度,编一个程序,将该线性表中元素的值为负数的项删除。 DATAS SEGMENT Link dw -9h,3h,33h,2h,1h,-77h,22h,23h,33h finial dw ($-Link)/TYPE LinkDATAS ENDSSTACKS SEGMENTSTACKS ENDSCODES SEGMENT ASSUME CS:CODES,DS:DATAS,SS:STACKSSTART: MOV AX,DATAS MOV DS,AX lea si,Link mov cx,finialag: mov ax,[si] cmp ax,0 jge exit dec cx push cx mov di,sidelete: mov ax,[di+2] mov [di],ax add di,2loop delete pop cxexit: add si,2loop ag MOV AH,4CH INT 21HCODES ENDS END START
阅读全文
0 0
- 汇编复习Test5
- test5
- test5
- test5
- test5
- test5
- test5
- test5
- Test5
- Test5
- Test5
- 汇编复习
- 复习下下汇编
- 汇编复习笔记
- NASM汇编指令复习
- NASM汇编指令复习
- 汇编原理复习
- 嵌入式ARM汇编复习
- nginx中使用pfx格式的ssl证书
- git技巧
- socket通信基础(三)
- 安装GITLAB
- 1.3 VS 2017 SDK的新特性
- 汇编复习Test5
- Kafka8使用Demo
- PHP 5.3、5.4、5.5、5.6 中的新特性(转、侵删)
- 网络七层模型
- centos下安装,简单配置redis
- P1207 双重回文数
- Redis 源码学习之 Redis 事务
- windows 控制台程序 响应 Ctrl+C
- 获取13/10位UTC格式时间