汇编语言的一道程序设计题 急求!!
; 本程序通过编译,运行正确
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 ;编译到此结束
求一道汇编语言程序设计题的答案
;-------------------------------------
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事继续清空下一个内存
百度【幽灵代码论坛】加入我们一起学习