汇编语言的一道程序设计题 急求!!

日期:2009-10-16 17:21:18 人气:1

汇编语言的一道程序设计题 急求!!

; 本程序通过编译,运行正确 Code Segment Assume CS:Code,DS:Code ; ------------------------------------- ; 功能:显示指定地址(Str_Addr)的字符串 ; 入口: ; Str_Addr=字符串地址(要求在数据段) ; 用法: Output Str_Addr ; 用法举例:Output PromptStr Output MACRO Str_Addr lea dx,Str_Addr mov ah,9 int 21h EndM ; ------------------------------------- ; 功能:输出回车换行 Output_CTLF proc Near push ax push dx mov ah,02h mov dl,0dh int 21h mov dl,0ah int 21h pop dx pop ax ret Output_CTLF endp ; ------------------------------------- ; 功能:根据自变量x的值,计算因变量y的值 ; 入口:x=自变量 ; 出口:在当前光标位置显示y的值 Calculate_y Proc Near cmp x,1 jnz $+8 mov y,0 ret cmp x,3 jae $+8 mov y,1 ret mov y,2 ret Calculate_y EndP ; ------------------------------------- x db ? ;自变量 y db ? ;因变量 Prompt_x db 'x=$' ;输入x的值提示信息 Prompt_y db 13,10,'y=$' ;显示y的值提示信息 Start: push cs pop ds Input_x: Output Prompt_x ;提示输入x的值 mov ah,1 int 21h cmp al,27 ;Esc? jz Exit_Proc ;结束程序 cmp al,'1' ;<1? jb Input_x ;重新输入 cmp al,'9' ;>9? ja Input_x ;重新输入 and al,0fh mov x,al ;保存自变量 call Calculate_y ;计算函数值 Output Prompt_y ;提示显示y的值 mov dl,y or dl,30h mov ah,2 ;显示一个字符 int 21h call Output_CTLF call Output_CTLF jmp Input_x Exit_Proc: mov ah,4ch ;结束程序 int 21h Code ENDS END Start ;编译到此结束
    A+

求一道汇编语言程序设计题的答案

;------------------------------------- DATA1 SEGMENT NUM DB 100, 79, 20, 78, 89, 95, 76, 40, 88 ;最多99个成绩 DB 80, 98, 40, 0, 100, 83, 92, 49 NN EQU $ - NUM MSG1 DB ' 0 ~ 59 : $' MSG2 DB '60 ~ 89 : $' MSG3 DB '90 ~100 : $' CRLF DB 13, 10, '$' N1 DB 0 N2 DB 0 N3 DB 0 DATA1 ENDS ;------------------------------------- CODE SEGMENT PARA PUBLIC ASSUME CS:CODE, DS:DATA1 START: MOV AX, DATA1 MOV DS, AX LEA SI, NUM MOV CX, NN LP: MOV AL, [SI] CMP AL, 60 JB N1_JY CMP AL, 90 JB N2_JY INC N3 JMP NEXT N1_JY: INC N1 JMP NEXT N2_JY: INC N2 NEXT: INC SI LOOP LP LEA DX, MSG1 MOV AH, 9 INT 21H MOV AL, N1 CALL HEX_ASC LEA DX, MSG2 MOV AH, 9 INT 21H MOV AL, N2 CALL HEX_ASC LEA DX, MSG3 MOV AH, 9 INT 21H MOV AL, N3 CALL HEX_ASC EXIT: MOV AH, 4CH INT 21H ;==================================== HEX_ASC PROC NEAR MOV AH, 0 MOV BL, 100 DIV BL MOV DL, AL ADD DL, '0' CALL OUT_DL MOV AL, AH MOV AH, 0 MOV BL, 10 DIV BL MOV DL, AL ADD DL, '0' CALL OUT_DL MOV DL, AH ADD DL, '0' CALL OUT_DL LEA DX, CRLF MOV AH, 9 INT 21H RET HEX_ASC ENDP ;==================================== OUT_DL PROC PUSH AX MOV AH, 2 INT 21H POP AX RET OUT_DL ENDP ;==================================== CODE ENDS ;------------------------------------- END START

阅读全文

汇编语言的一些程序设计题,谁能举例解答一下

你的问题问的不对,寄存机 AX BX CX DX就是具体的数据,你可以把这些当成变量使用 a,b,c,d在程序中是分配的内存空间,和寄存器存在着本质上的区别,所以这些题目使用的数据就是:AX,BX,CX,DX这些寄存器数据 1、交换可以用堆栈进行, AX。BX相互交换内容 PUSH AX PUSH BX POP AX POP BX 这样AX和BX内容就交换了 2、 为了方便你理解,写一些不正确的表达式吧 MOV AX,0 相当于 int a=0; XOR AX,AX XOR这个指令,如果后面两个数相同,则为0,并将0存放到第一个寄存器AX中 SUB AX,AX 相当于 int a=1; a=a-a; 所以结果也是0 AND AX,0 AND指令,将后面两个数据按位‘与’操作,只要有一个数为0,结果就为0,所以AX的结果就是0了。 第三题看不懂什么意思,想问什么东西? 4、 内存复制的代码: mov si,offset setscreen;原数据偏移地址 mov di,0 ;目标偏移地址 mov cx,offset setscreen_end-offset setscreen ;计算出数据长度 cld ;di,si每次执行movsb的时候都递增1 rep movsb ;开始复制 清零: 如果数据段有一块内存需要清零 mov cx,100; // 数据段长度 mov si,0; // 开始地址 mov al,0; _start: mov byte ptr ds:[si],al; dec cx; inc si; // 指向下一个字节 cmp cx,0; jnz _start; // 如果cx不为0事继续清空下一个内存 百度【幽灵代码论坛】加入我们一起学习

阅读全文