注册 登录
编程论坛 汇编论坛

我想通过BP修改buf中的内容,程序如下,哪错了?

fz4628413 发布于 2012-11-08 13:25, 476 次点击
;输入一个n,显示1-n的所有素数,n最大为65537
;n用DB定义即可
ASSUME CS:code,DS:data,SS:stack

stack SEGMENT
    SLEN    EQU 200
    DW SLEN DUP(?)
stack ENDS

data SEGMENT
    ;'-'==2dH
    ;'0'==30H
    buf  DB 10   ;DS:0000H
    len     DB ?
         DB 10 DUP(0)
         DB '$'
data ENDS

code SEGMENT
start:
    MOV AX,data
    MOV DS,AX
    MOV ES,AX
    MOV AX,stack
    MOV SS,AX
    MOV SP,SLEN
    ;---Code Begin
    ;输入字符串
    LEA DX,buf
    MOV AH,10
    INT 21H
    LEA SI,buf
    CALL MToNum
    ;LEA BX,len
    ;INC BX
    ;MOV AX,[BX]
    ;---Code End
    MOV AX,0
    CALL MCrlf
    LEA DX,buf
    MOV AH,9
    INT 21H
    MOV AH,4CH
    INT 21H
;***********************************
;-----------------------------------
;ASCII码转数字,覆盖原来的结果
;如:a='1',调用后:a=01H
;void MToNum(Char* bufStr)
;@Pram:
;SI---bufStr
; E.x: LEA  SI,bufStr
;      CALL MToNum
;-----------------------------------
MToNum PROC
    PUSH BP
    PUSH CX
    INC  SI
    ;取得字符个数,不含回车符
    MOV  CL,BYTE PTR [SI]
    L_MToNum1:
        MOV  BP,SI
        ADD  BP,CX
        MOV  CH,BYTE PTR DS:[BP]
        SUB  CH,30H
        MOV  DS:[BP],CH
        MOV  CH,0
    LOOP L_MToNum1
    POP  CX
    POP  BP
    ret
MToNum ENDP
;-----------------------------------
;数字转ASCII码
;-----------------------------------
MToASCII PROC

    ret                                 ;adsf
MToASCII ENDP
;-----------------------------------
;输出回车换行
;-----------------------------------
MCrlf PROC                                      ;asdfa
    PUSH DX
    PUSH AX
    MOV DL, 13
    MOV AH, 2
    INT 21H
    MOV DL, 10
    MOV AH, 2
    INT 21H
    POP AX
    POP DX
    RET
MCrlf ENDP
code ENDS
     END    start
7 回复
#2
fz46284132012-11-08 13:30
在线坐等~
#3
有容就大2012-11-08 14:24
LOOP L_MToNum1的循环次数CX是多少? 循环里面改变CH又会有什么影响?
#4
fz46284132012-11-08 18:45
CX是输入的字符个数(递减),CH用来暂时存放需要-30H的字符,如果没有MOV CH,0 那么循环次数将变大
#5
有容就大2012-11-08 18:48
在LOOP循环开始前要有确定的 CX 也就是必须确定CH 和 CL。
在循环内如果没有保护机制 不能随便使用CX 、CH 、CL来参与运算和存储。
#6
fz46284132012-11-08 18:50
以下是引用有容就大在2012-11-8 14:24:05的发言:

LOOP L_MToNum1的循环次数CX是多少? 循环里面改变CH又会有什么影响?

刚发现没做错。。。我无病呻吟了……sorry。
#7
有容就大2012-11-08 19:42
回复 6楼 fz4628413
呵呵 是哦 希望你搞出整个程序来。


[ 本帖最后由 有容就大 于 2012-11-8 19:47 编辑 ]
#8
fz46284132012-11-08 20:00
以下是引用有容就大在2012-11-8 19:42:50的发言:

呵呵 是哦 希望你搞出整个程序来。

呵呵,谢啦~一定会的
1