回 帖 发 新 帖 刷新版面

主题:请大家帮帮我啊

有没有人能帮我解释一下这段程序的功能,能不能尽可能的详细一点啊,我是初学者啊很多不明白的,谢谢大家了啊!
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个回复)

沙发

最终完成的应该是把value的值除100
然后把dl=30+30
应该就是这个

板凳

你说的不是很清楚啊
我本来想问的是怎么能用汇编把十六进制的数转化成十进制的数并在屏幕上输出,但是我想不到如何改这个程序,这不是完整的程序

3 楼

挺简单的东西让你给弄那么复杂

4 楼


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 楼

上以程序经验证为43157与结果相符

6 楼

我重新整理了程序,实现的功能是将十六进制的数转换成十进制的数并在屏幕上输出,和大家一起分享!

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 楼

首先先谢谢klainogn,你的程序我汇编 连接过了但是不知道为什么不能运行!

8 楼

又要请大家帮忙了!   

设有一段英文,以$为结束符,试编写一程序查找对单词SUN在该文中出现的次数。要求如下:
从键盘输入这一段以$为结束符的英文
统计SUN出现的次数
以格式”SUN XXXX”显示出现次数

9 楼

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 楼

[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]
学习了.

我来回复

您尚未登录,请登录后再回复。点此登录或注册