. : : Assembly Language : : .  |  首页  |  我提出的问题  |  我参与的问题  |  我的收藏  |  消息中心   |  游客  登录  | 
刷新 | 提问 | 未解决 | 已解决 | 精华区 | 搜索 |
  《汇编语言》论坛 ->基础知识
  管理员: assembly   [回复本贴] [收藏本贴] [管理本贴] [关闭窗口]
主题 : :  在这段代码中SI为什么为0  [已解决] 回复[ 3次 ]   点击[ 353次 ]  
a83841365
[帖 主]   [ 发表时间:2009-09-03 18:20 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:2
注册日期:2008-11-04 12:07
title ***简单密码输入 by lluct***
data segment                                           ;定义数据段
input   db      100 dup (?)                     ;定义输入的字符串,字符串必须用db定义,长度为100个字节
cmpare  db      '5201314','$'                   ;定义密码
msg1    db      'PASSWORD RIGHT!','$'           ;定义输入密码正确后显示出来的信息
msg2    db      'PASSWORD ERROR!','$'           ;定义输入密码错误后显示出来的信息
headmsg db      'ENTER YOUR PASSWORD:','$'        ;头信息
data ends                                           ;数据段结尾 

code segment                                           ;定义代码段
 assume cs:code                                  ;规定cs的内容
 assume ds:data                                  ;规定ds的内容

start:  mov         ax,data                          ;程序从start开始
        mov         ds,ax                                  ;ds置初值,data的段地址
        mov         si,0                                  ;变址寄存器置初值0

变址寄存器置初值0设置为0有什么用??
a83841365
[第1楼]   [ 回复时间:2009-09-03 18:48 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:2
注册日期:2008-11-04 12:07
这是接上面的
call        enter                                  ;调用显示回车换行子程序
        lea     dx,headmsg                         ;输出头信息字符串的偏移地址
        call    dispchs                          ;调用显示字符串子程序
repeat: mov         ah,01h                          ;定义repeat标号,用于循环输入单个字符.调用1号功能:从键盘输入一个字符并回显
         int         21h                                  ;完成输入回显
        cmp     al,0dh                          ;输入的字符和cr(回车)比较
         je         finish                          ;如果等于回车就转移到finish
         mov         input[si],al                         ;把al的置传送到input的si地址中(好像是这样吧)
         inc         si                                  ;si加1
         jmp         repeat                          ;无条件转移到repeat
finish: mov         input[si],24h                         ;给输入完成的字符串加上结束标志($)
         call         enter

mov         input[si],al这有什么用为什么把AL放到SI
yxgc2008
[第2楼]   [ 回复时间:2009-09-03 20:42 ]   [引用]   [回复]   [ top ] 
荣誉值:4
信誉值:0
注册日期:2009-09-03 20:09
si设置为0:在这里用来表明input这个数组的下标从0开始;
mov input[si],al这有什么用为什么把AL放到SI:这表明输入的密码是由若干个字符组成,而每次输入一个,按顺序放入input这个数组中。
a83841365
[第3楼]   [ 回复时间:2010-01-04 11:51 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:2
注册日期:2008-11-04 12:07
此贴由 贴主 于 [ 2010-01-04 11:51 ] 结贴。 结贴原因:问题已解决
得分情况: 2楼(yxgc2008):4分  
此问题已结贴!
    Copyright © 2006-2024   ASMEDU.NET  All Rights Reserved