汇编复习Test5
2017-06-09 10:08
225 查看
1.编一个程序,从键盘输入一个不长于120个字符的串(回车键结束),然后将其中的字母字符显示输出(在显示输出前,补充输出回车换行)。 DATAS SEGMENT BUF DB 120 DUP(?) DATAS ENDS STACKS SEGMENT ;此处输入堆栈段代码 STACKS ENDS CODES SEGMENT ASSUME CS:CODES,DS:DATAS,SS:STACKS START: MOV AX,DATAS MOV DS,AX MOV SI,offset BUF AG: MOV AH,01H INT 21H CMP AL,0Dh JE EXIT MOV [SI],AL inc si JMP AG EXIT: MOV [SI],AL MOV AH,02H MOV SI,offset BUF AG1: mov dl,[si] INT 21H CMP AL,0Dh JE EXIT1 inc si JMP AG1 EXIT1: MOV AH,4CH INT 21H CODES ENDS END START 2.编一个程序完成从键盘上输入一个4位的16进制数,并以八进制形式显示出来。 DATAS SEGMENT num dw 1000h,100h,10h,1h DATAS ENDS STACKS SEGMENT ;此处输入堆栈段代码 STACKS ENDS CODES SEGMENT ASSUME CS:CODES,DS:DATAS,SS:STACKS START: MOV AX,DATAS MOV DS,AX MOV SI,OFFSET num MOV CX,4 MOV BP,0 input: MOV AH,01H INT 21H CMP AL,39H JBE less SUB AL,7H less: SUB AL,30h MOV AH,0 MOV BX,[SI] mul BX ADD BP,AX ADD SI,2 loop input rol bp,1 mov dx,bp and DL,01H add dl,30h mov ah,02h INT 21H mov cx,5 output: push cx mov cl,3 rol bp,cl mov dx,bp and DL,07H add dl,30h mov ah,02h INT 21H pop cx loop output MOV AH,4CH INT 21H CODES ENDS END START 3. 在首地址为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 ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA main proc far START: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 QUIT L1: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 ;否则没 970f 有相等的,调用子程序显示disp3 JMP QUIT L2: LEA DX,DISP2 CALL PRINT1 QUIT:MOV AX,4C00H INT 21H main endp ; ;子程序部分 PRINT1 PROC MOV AH,09H INT 21H ;调用功能显示都相等 RET PRINT1 ENDP CODE ENDS END START 5.Link指向一个字线性表,其中的首单元保存线性表的长度,编一个程序,将该线性表中元素的值为负数的项删除。 DATAS SEGMENT Link dw -9h,3h,33h,2h,1h,-77h,22h,23h,33h finial dw ($-Link)/TYPE Link DATAS ENDS STACKS SEGMENT STACKS ENDS CODES SEGMENT ASSUME CS:CODES,DS:DATAS,SS:STACKS START: MOV AX,DATAS MOV DS,AX lea si,Link mov cx,finial ag: mov ax,[si] cmp ax,0 jge exit dec cx push cx mov di,si delete: mov ax,[di+2] mov [di],ax add di,2 loop delete pop cx exit: add si,2 loop ag MOV AH,4CH INT 21H CODES ENDS END START
相关文章推荐
- 大学计算机课程复习--汇编语言
- 关于在8086/88内存寻址方式 (这是我一次复习汇编时看到的好文章,所以转来共享)
- 汇编语言复习(一天一练之day1)
- 复习一下汇编
- 复习-C语言内嵌汇编-初级(2)
- 汇编复习笔记系列
- 汇编语言复习摘要一——基础知识
- 汇编语言复习摘要二——寄存器
- 汇编语言复习摘要七——更灵活的定位内存地址方法
- 《linux 内核完全剖析》get_free_page(void)【嵌入式汇编复习看这里】
- 汇编复习笔记
- 跟大家一起复习汇编语言之一(实模式)【原创】
- 汇编语言复习摘要八——数据处理的两个基本问题
- 复习8086汇编中的 CLI STI CLD STD指令
- 重新复习汇编语言
- [No.000001]2015-01-07汇编复习
- 汇编语言复习摘要三——寄存器的内存访问
- 汇编学习笔记-复习loop与[]-inc
- 汇编语言复习(一天一练之day2)
- 汇编语言复习摘要四——第一个汇编程序