当前位置:首页 » 服务存储 » 汇编语言的字符串怎么存储的
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

汇编语言的字符串怎么存储的

发布时间: 2022-02-01 13:57:31

A. 王爽汇编语言db存储字符串为什么是两个字节啊

db 定义的数据应按 字节 进行分析、辨识、存储。

王爽 书中这部分内容 是 bug。

B. 汇编语言:string DB "i am a student"这条语句将字符串如何存储的

汇编语言:string DB "i am a student"这条语句将字符串如何存储的?
--------
顺序存储。
一个字符,占用一个字节。
最后并没有'\0'。

C. 汇编语言中字符串的使用

mov dl,[len1]
mov ah,02h
int 21h
----
呵呵,输出,不是这样简单的。
len1,是二进制数字,必须把它变成十进制的个位、十位..,
再把各位数,都变换成ASCII码,放到DL中,最后才能输出到显示屏。

D. 汇编语言,从缓存区输出字符串,CX值存放问题

用A号功能存入了字符串到BUFFER,
[BUFFER],是预定的缓存大小,
[BUFFER+1],是实际输入的字符数目。
----------------------
字符数目,只是一个字节。

MOVCL,[BX-1]----取出一个字节,这是对的。
MOVCX,[BX-1]----下面这些,都是取两个字节,都是错的。
MOVCX,[BUFFER+1]
MOVCX,BUFFER+1
-----------------------
采纳答案中,说法都是错误的。
------
MOVCX,[BX-1];--针对这条指令,他说:
《BUFFER是字节缓冲区,所以这里是操作数据不匹配》

执行这条指令后,所需的数据,确实是传送到CL了。
只是多传送了CH而已。

错误,在于多传送了一个字节,并不是匹配不匹配的问题。
------
MOVCX,BUFFER+1,--针对这条指令,他说:
《指令执行过后,CX里存储的是BUFFER的地址+1,是个地址,不是值》
如果做过实验,他就不会这么说了。

他弄混了下面的指令:
MOVCX,OFFSETBUFFER--这才是传送地址。
-----------------------

E. 汇编语言中字符串存储时DB DW怎么确定是选用DB存储还是DW存储

字符串存储必须用db(单字节顺序存放),

不能用dw(双字节顺序存放,且要分开编辑。按低到低字节、高到高位字节对应)

codesegment
assumecs:code
org100h
start:
jmpbbb
nop
msg1dw'he','ll','o','wo','rl','d','$'

bbb:
pushcs
popds

leadx,msg1
movah,9
int21h

movah,4ch
int21h
codeends
endstart

上例输出的是“ehll oowlr d”,而不是“hello world”

F. c语言中怎么存一个字符串

在c语言中存储一个字符串,一般有两种方法,一种是字符指针,一种是使用字符数组。比如:

constchar*str="hello";//使用字符串指针
constcharstr[]="hello";//使用字符数组

如果保存的字符串,需要修改。一般使用字符数组。比如:

charpath[256]="c:\windows\";
strcat(path,"system32");

G. (汇编)关于汇编语言的字符串

1)不用,如果不用串操作指令,我们可以通过设定循环次数,或在结束处加0判断是否结束。
2)定义字符串在汇编语言中用一对‘
’表示,如
c
db
'happy!'

H. 汇编语言中字符串变量是如何存储的啊

C++的关键字 asm

微软详述:

__asm关键字启动内联汇编并且能写在任何c/c++合法语句之处.它不能单独出现.它必须接汇编指令、一组被大括号包含的指令或一对空括号.术语“__asm 块”在这里是任意一个指令或一组指令无论是否在括号内。

以下代码片段是在括号内的一个简单的__asm块。

__asm

{

mov al, 2

mov dx, 0xD007

out al, dx

}

另一种方法是,你可以在每个汇编指令前放置__asm

__asm mov al, 2

__asm mov dx, 0xD007

__asm out al, dx

因为__asm关键字是一个语句分隔符,你也可以将汇编指令放在同一行:

__asm mov al, 2 __asm mov dx, 0xD007 __asm out al, dx

以上三个的例子产生相同的代码,但是第一种风格(把__asm块用括号括起来)有一些优势。括号可以清晰的将C或C++代码和汇编代码分开,并且避免了不必要的重复__asm关键字。括号也能避免模糊性。如果你想在__asm块的同一行放置一个C或C++语句,你必须将块用括号括

起来。没有括号,编译器不能告诉汇编代码在哪里停止而C或C++代码在哪里开始。最后,因为在括号的文字有和原始MASM一样的格式,你能轻松的从一个已有的MASM源文件里剪切和黏贴文字到文件来。

不同于C和C++的括号,包含__asm块的括号对变量的作用域并没有效果。你也能嵌套__asm块,嵌套对变量作用域也没有效果。
请参考

I. 汇编语言 字符串传送和字符串储存的区别!

传送:一般指的是将数据传送到寄存器中。
储存:一般指的是将数据存储到制定的内存地址中。

J. 汇编语言字符窜存储

字符串在内存中以字节(byte)为单位存储,字符串包含多少字符就需要多少byte来存。汇编中定义一个字符串如下:

myStringBYTE"ABCDEF",0;常以0作为字符串的结尾

内存中存储顺序如图所示,从箭头开始,依次向下。假设第一个地址是0000h,下一个byte的地址就是00001h,依次类推。内存中存储的是字符的二进制编码,比如A41h=01000001b

希望对LZ有用~

PS:2L说的是英特尔架构CPU的“小尾顺序”规则,其他一些CPU可能采用“大尾顺序”

比如定义一个字(WORD):myWordWORD1234h如果是小尾顺序,那低地址存34h,高地址存12h,如图中0000h的地方存34h,00001h的地方存12h。大尾顺序则相反~(汗。。。。但愿不显得太罗嗦)