. : : Assembly Language : : .  |  首页  |  我提出的问题  |  我参与的问题  |  我的收藏  |  消息中心   |  游客  登录  | 
刷新 | 提问 | 未解决 | 已解决 | 精华区 | 搜索 |
  《汇编语言》论坛 ->更灵活的定位内存地址的方法
  管理员: assembly   [回复本贴] [收藏本贴] [管理本贴] [关闭窗口]
主题 : :  147(电子书第156页)问题7.9,我的做法,和大家有所不同  [待解决] 回复[ 8次 ]   点击[ 576次 ]  
cdzjf
[帖 主]   [ 发表时间:2007-11-28 14:18 ]   [引用]   [回复]   [ top ] 
荣誉值:1
信誉值:6
注册日期:2007-11-14 11:28
assume cs:code,ss:stack,ds:data 
stack segment 
dw 0,0,0,0,0,0,0,0 
stack ends 
data segment 
db '1. display      ' 
db '2. brows        ' 
db '3. replace      ' 
db '4. modify       ' 
data ends 
code segment 
start:    mov ax,stack 
    mov ss,ax 
    mov sp,16 
    mov ax,data 
    mov ds,ax 
    mov bx,4(有的写0)
    mov cx,4 
s0:    push cx 
    mov si,0(有的写3)
    mov cx,4 
s:    mov al,[bx+si] 
    and al,11011111b 
    mov [bx+si],al 
    inc si 

    loop s 
    pop cx 
    add bx,16 
    loop s0 
    mov ax,4c00h 
    int 21h 
code ends 
end start

其实就将这题的上一题中的循环次数和起始偏移地址改一下就完了,
我不知道这样做的题目对吗?
fishboy
[第1楼]   [ 回复时间:2007-11-28 14:31 ]   [引用]   [回复]   [ top ] 
荣誉值:283
信誉值:0
注册日期:2007-06-26 11:42
我觉得对于不对,计算机能给你最正确的回答。
你运行的结果对就没问题。思路和想法大家都可能有差别。
新思路新想法支持,不过,这些想法的初步检测也应该是提出该想法的一个部分。
cdzjf
[第2楼]   [ 回复时间:2007-11-29 10:43 ]   [引用]   [回复]   [ top ] 
荣誉值:1
信誉值:6
注册日期:2007-11-14 11:28
就是没有运行试过的啊
philmei
[第3楼]   [ 回复时间:2007-12-01 02:04 ]   [引用]   [回复]   [ top ] 
荣誉值:7
信誉值:10
注册日期:2007-11-26 03:32
mov bx,4这地方你多设了一个字节

00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
0 ,1 ,2 ,3 ,4 ,5 ,6 ,7 ,8 ,9 ,A ,B ,C ,D ,E ,F

第4个字节应该是3
goal00001111
[第4楼]   [ 回复时间:2007-12-12 20:24 ]   [引用]   [回复]   [ top ] 
荣誉值:3
信誉值:9
注册日期:2007-10-19 10:16
同意3楼。还有,楼主以列序为主序,看着怪难受的,还是以行序为主序看着顺眼。
real4ever
[第5楼]   [ 回复时间:2008-01-12 18:48 ]   [引用]   [回复]   [ top ] 
荣誉值:3
信誉值:0
注册日期:2008-01-01 14:49
其实,最后这个主要是在检测[bx+si+idata]或者[bx+di+idata]的使用!
其实思路一样!形式不同.
heihei1981
[第6楼]   [ 回复时间:2008-04-09 16:25 ]   [引用]   [回复]   [ top ] 
荣誉值:10
信誉值:10
注册日期:2008-03-21 21:38
assume cs:code,ss:stack,ds:data 
stack segment 
dw 0,0,0,0,0,0,0,0 
stack ends 
data segment 
db '1. display      ' 
db '2. brows        ' 
db '3. replace      ' 
db '4. modify       ' 
data ends 
code segment 
start:    mov ax,stack 
    mov ss,ax 
    mov sp,16 
    mov ax,data 
    mov ds,ax 
    mov bx,4(有的写0)
    mov cx,4 
s0:    push cx 
    mov si,0(有的写3)
    mov cx,4 
s:    mov al,[bx+si] 
    and al,11011111b 
    mov [bx+si],al 
    inc si 

    loop s 
    pop cx 
    add bx,16 
    loop s0 
    mov ax,4c00h 
    int 21h 
code ends 
end start

其实就将这题的上一题中的循环次数和起始偏移地址改一下就完了,
我不知道这样做的题目对吗?
------------------
回复:

一道题的解题思路有很多,有简单的有复杂的就看你能想到思路了,但是前提是结果必须是符合题目的要求的

而你这题给的答案是错误的
虽然我没DEBUG,但从程序的流程上来看,你答案得出的结果是将每行单词从第2个字母开始后4个字母改为大写

有些逻辑错误仔细跟着流程走就能很快判断出来的

我冒昧的估计下,你产生这个错误的原因应该是对于偏移地址的开始判断没弄清楚,你可能认为[4]的就刚好是
'1. display      '  第4个字母,但起始偏移地址是从0开始的

就好比有些时候你混淆了某些语言里的数组下标概念一样,有些语言的数组下标是从0开始有些又是从1开始,呵呵
yzh127
[第7楼]   [ 回复时间:2008-04-26 03:04 ]   [引用]   [回复]   [ top ] 
荣誉值:9
信誉值:0
注册日期:2008-04-17 02:17
倒,这有什么不同的,就是把常量地址自己作了一下加法
suanliuyiting
[第8楼]   [ 回复时间:2008-05-03 18:05 ]   [引用]   [回复]   [ top ] 
荣誉值:15
信誉值:0
注册日期:2008-05-03 15:26
我不清楚四楼说的,怎么以列序为主序的?我看是以行为序啊
需要登录后才能回帖 -->> 请单击此处登录
    Copyright © 2006-2024   ASMEDU.NET  All Rights Reserved