主题:请大家帮帮我啊
wazihexila
[专家分:0] 发布于 2006-11-30 23:59:00
有没有人能帮我解释一下这段程序的功能,能不能尽可能的详细一点啊,我是初学者啊很多不明白的,谢谢大家了啊!
data segment
value dw 36h
data ends
stack segment stack
db 200h dup(?)
tos label word
stack ends
code segment
assume cs:code,ds:data,ss:stack
main proc far
mov ax,stack
mov ss,ax
mov sp,offset tos
push ds
xor ax,ax
push ax
mov ax,data
mov ds,ax
mov cx,2
mov ax,value
mov bx,10
lp1: xor dx,dx
div bx
add dl,30h
push dx
loop lp1
mov cx,2
lp2: pop dx
mov ah,2
int 21h
loop lp2
ret
main endp
code ends
end main
回复列表 (共13个回复)
沙发
csuwzj [专家分:0] 发布于 2006-12-02 18:03:00
最终完成的应该是把value的值除100
然后把dl=30+30
应该就是这个
板凳
wazihexila [专家分:0] 发布于 2006-12-03 14:58:00
你说的不是很清楚啊
我本来想问的是怎么能用汇编把十六进制的数转化成十进制的数并在屏幕上输出,但是我想不到如何改这个程序,这不是完整的程序
3 楼
klainogn [专家分:270] 发布于 2006-12-05 11:26:00
挺简单的东西让你给弄那么复杂
4 楼
klainogn [专家分:270] 发布于 2006-12-05 18:53:00
data segment
value dw 1010100010010101b
data ends
code segment
assume ds:data,cs:code
start:
mov ax,data
mov ds,ax
mov ax,value
mov bx,10
mov cx,1
again: mov dx,0
inc cx
div bx
push dx
cmp ax,10
jl next0
jmp again
next0: push ax
next: pop dx
and dx,00ffh
or dx,0030h
mov ah,02h
int 21h
loop next
mov ah,4ch
int 21h
code ends
end start
5 楼
klainogn [专家分:270] 发布于 2006-12-05 18:56:00
上以程序经验证为43157与结果相符
6 楼
wazihexila [专家分:0] 发布于 2006-12-06 21:22:00
我重新整理了程序,实现的功能是将十六进制的数转换成十进制的数并在屏幕上输出,和大家一起分享!
DATA SEGMENT
MESS DB 'CONTINUE?(Y/N) $'
RES DB 0dh,0ah,'Please Input Number: $'
DATA ENDS
STACK SEGMENT
DW 128 DUP(0)
STACK ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,SS:STACK
MAIN:MOV AX,DATA
MOV DS,AX
MOV AX,STACK
MOV SS,AX
Lp1: CALL zhuan
CALL huichehuanhang
CALL chufa
CALL huichehuanhang
mov dx,offset mess
MOV AH,9
INT 21H
MOV AH,1
INT 21H
CMP AL,'Y'
JZ Lp1
CMP AL,'y'
JZ Lp1
MOV AH,4CH
INT 21H
ZHUAN PROC
PUSH AX
PUSH CX
mov dx,offset res
MOV AH,9
INT 21H
CALL HUICHEHUANHANG
MOV BX,0
LP2: MOV AH,1
INT 21H
CMP AL,30H
JL LP5
CMP AL,3AH
JL LP4
CMP AL,41H
JL LP5
CMP AL,47H
JL LP3
CMP AL,61H
JL LP5
CMP AL,67H
JGE LP5
SUB AL,20H
LP3:SUB AL,7
LP4:SUB AL,30H
MOV CL,4
SHL BX,CL
MOV AH,0
ADD BX,AX
JMP Lp1
LP5:POP CX
POP AX
RET
ZHUAN ENDP
HUICHEHUANHANG PROC
PUSH AX
PUSH DX
MOV DL,0DH
MOV AH,2
INT 21H
MOV DL,0AH
MOV AH,2
INT 21H
POP DX
POP AX
RET
HUICHEHUANHANG ENDP
CHUFA PROC
PUSH CX
MOV CX,10000
CALL DISPLAY
MOV CX,1000
CALL DISPLAY
MOV CX,100
CALL DISPLAY
MOV CX,10
CALL DISPLAY
MOV CX,1
CALL DISPLAY
POP CX
RET
CHUFA ENDP
DISPLAY PROC
PUSH AX
PUSH CX
PUSH DX
MOV AX,BX
MOV DX,0
DIV CX
MOV BX,DX
MOV DL,AL
ADD DL,30H
MOV AH,2
INT 21H
POP DX
POP CX
POP AX
RET
DISPLAY ENDP
CODE ENDS
END MAIN
7 楼
wazihexila [专家分:0] 发布于 2006-12-06 21:32:00
首先先谢谢klainogn,你的程序我汇编 连接过了但是不知道为什么不能运行!
8 楼
wazihexila [专家分:0] 发布于 2006-12-06 21:33:00
又要请大家帮忙了!
设有一段英文,以$为结束符,试编写一程序查找对单词SUN在该文中出现的次数。要求如下:
从键盘输入这一段以$为结束符的英文
统计SUN出现的次数
以格式”SUN XXXX”显示出现次数
9 楼
klainogn [专家分:270] 发布于 2006-12-10 14:13:00
data segment
value dw 1010100010010101b
data ends
code segment
assume ds:data,cs:code
start:
mov ax,data
mov ds,ax
mov ax,value
mov bx,10
mov cx,1
again: mov dx,0
inc cx
div bx
push dx
cmp ax,10
jl next0
jmp again
next0: push ax
next: pop dx
and dx,00ffh
or dx,0030h
mov ah,02h
int 21h
loop next
mov ah,07h
int 21h
mov ah,4ch
int 21h
code ends
end start
以上程序我用MASM 6.15汇编后,完全可以显示出结果,中间加上
MOV AH,07H
INT 21H
是为了在WINDOWS环境下运行程序也能看到结果,并且按任意键结果程序运行
10 楼
yclz [专家分:1520] 发布于 2006-12-10 19:01:00
[quote]data segment
value dw 1010100010010101b
data ends
code segment
assume ds:data,cs:code
start:
mov ax,data
mov ds,ax
mov ax,value
mov bx,10
mov cx,1
again: mov dx,0
inc cx
div bx
push dx
cmp ax,10
jl next0
jmp again
next0: push ax
next: pop dx
and dx,00ffh
or dx,0030h
mov ah,02h
int 21h
loop next
mov ah,07h
int 21h
mov ah,4ch
int 21h
code ends
end start
以上程序我用MASM 6.15汇编后,完全可以显示出结果,中间加上
MOV AH,07H
INT 21H
是为了在WINDOWS环境下运行程序也能看到结果,并且按任意键结果程序运行[/quote]
学习了.
我来回复