| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1709 人关注过本帖
标题:[求助]一道关于实现右移的程序
只看楼主 加入收藏
珊蝴虫
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2007-6-14
收藏
 问题点数:0 回复次数:10 
[求助]一道关于实现右移的程序

这道题的大概思路是:输入一个字符串(由0和1组成),然后根据为0还是为1,通过循环移位将寄存器DX中的各位变成相应的0或1,再将DX右移4位,最后根据DX中各位的情况转换成一个字符串输出。现在程序有错,我实在找不出来,恳请高人相助,谢谢!
data segment
buf db 18
db ?
db 16 dup(?)
crlf db 13,10,'$'
b db 16 dup(?)
db '$'
message db 'input 16 bits binary numbers:$'
data ends
code segment
assume cs:code,ds:data
begin: mov ax,data
mov ds,ax
lea dx,message
mov ah,9
int 21h
mov ah,10
lea dx,buf
int 21h
lea dx,crlf
mov ah,9
int 21h
mov cl,buf+1
lea si,buf+2
next: mov dl,[si]
mov ah,2
int 21h
inc si
dec cl
jne next

lea si,buf+2
mov dx,0
mov cx,16
clc
l1: cmp [si],30h
je next2
stc
next2: rcl dx,1
inc si
dec cx
jne l1

mov cl,4
shr dx,cl

lea si,b
mov cx,16
l2: shl dx,1
jnb next3
mov [si],31h
jmp next4
next3: mov [si],30h
next4: inc si
dec cx
jne l2
mov dl,13
int 21h
mov dl,10
int 21h


lea dx,b
mov ah,9
int 21h
mov ah,4ch
int 21h
code ends
end begin

搜索更多相关主题的帖子: 寄存器 segment data dup 
2007-06-15 01:00
爱以走远
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:52
帖 子:7542
专家分:21
注 册:2007-3-16
收藏
得分:0 

data segment
buf db 18
db ?
db 16 dup(?)
crlf db 13,10,'$'
b db 16 dup(?)
db '$'
message db 'input 16 bits binary numbers:$'
data ends
code segment
assume cs:code,ds:data
begin: mov ax,data
mov ds,ax
lea dx,message
mov ah,9
int 21h
mov ah,10
lea dx,buf
int 21h
lea dx,crlf
mov ah,9
int 21h
mov cl,buf+1
lea si,buf+2
next: mov dl,[si]
mov ah,2
int 21h
inc si
dec cl
jne next

lea si,buf+2
mov dx,0
mov cx,16
clc
l1: cmp [si],byte ptr 30h
je next2
stc
next2: rcl dx,1
inc si
dec cx
jne l1

mov cl,4
shr dx,cl

lea si,b
mov cx,16
l2: shl dx,1
jnb next3
mov [si],byte ptr 31h
jmp next4
next3: mov [si],byte ptr 30h
next4: inc si
dec cx
jne l2
mov dl,13
int 21h
mov dl,10
int 21h


lea dx,b
mov ah,9
int 21h
mov ah,4ch
int 21h
code ends
end begin


   好好活着,因为我们会死很久!!!
2007-06-15 12:33
爱以走远
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:52
帖 子:7542
专家分:21
注 册:2007-3-16
收藏
得分:0 
mov dl,[si]
mov [si],31h
mov [si],30h
这三个要加属性符 byte ptr

   好好活着,因为我们会死很久!!!
2007-06-15 12:35
珊蝴虫
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2007-6-14
收藏
得分:0 
谢谢!我去试一试
2007-06-15 18:08
野比
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:24
帖 子:1627
专家分:516
注 册:2007-5-24
收藏
得分:0 
以下是引用爱以走远在2007-6-15 12:35:02的发言:
mov dl,[si]
mov [si],31h
mov [si],30h
这三个要加属性符 byte ptr

请教一下, BYTE PTR 应该加在[SI]前,还是31H前?
我觉得应该[SI]前吧? 31H作为操作数存到[SI]的那个字节中.
BYTE PTR 也可以修饰常数吗?


女侠,约吗?
2007-06-15 21:23
菜鸟上路
Rank: 4
等 级:贵宾
威 望:14
帖 子:1120
专家分:0
注 册:2006-3-21
收藏
得分:0 

我一般也加在[SI]前


2007-06-15 22:28
爱以走远
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:52
帖 子:7542
专家分:21
注 册:2007-3-16
收藏
得分:0 
以下是引用野比在2007-6-15 21:23:27的发言:

请教一下, BYTE PTR 应该加在[SI]前,还是31H前?
我觉得应该[SI]前吧? 31H作为操作数存到[SI]的那个字节中.
BYTE PTR 也可以修饰常数吗?

因为[si]是字节 你要把后面的31H指定为字节形式
在这里就当然要加到31H的前面


   好好活着,因为我们会死很久!!!
2007-06-15 23:18
野比
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:24
帖 子:1627
专家分:516
注 册:2007-5-24
收藏
得分:0 
以下是引用爱以走远在2007-6-15 23:18:17的发言:

因为[si]是字节 你要把后面的31H指定为字节形式
在这里就当然要加到31H的前面

那就是PTR可以修饰常数了?
收到


女侠,约吗?
2007-06-15 23:30
zez2626
Rank: 1
等 级:新手上路
威 望:1
帖 子:40
专家分:0
注 册:2007-6-16
收藏
得分:0 

我试过了,就按照2楼的说法去做,但不管我输的内容是什么,当然都是16进制数,结果全是 0000111111111111
为什么呀?

2007-06-16 09:42
菜鸟上路
Rank: 4
等 级:贵宾
威 望:14
帖 子:1120
专家分:0
注 册:2006-3-21
收藏
得分:0 
输入的也是0和1

2007-06-16 11:33
快速回复:[求助]一道关于实现右移的程序
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.030913 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved