代码段使用数据-汇编:在代码中使用数据,见代码

问题描述

汇编:在代码中使用数据,见代码
编程计算以下8个数据的和,结果存放在ax寄存器中
0123h 0456h 0789h 0abch 0defh 0fedh 0cbah 0987h
结果为: 4BDB
P123 《汇编语言(第2版)》王爽

8个数据定义在代码段cs,我的想法是将cs赋值给ds,然后使用bx做偏移地址""add ax ds:[bx]"",但是书上是直接使用""add ax cs:[bx]"",运行之后导致结果不相同。

【1.运行结果是:ax = 4BD8】

    assume cs:code    ;代码段    code segment    ;定义8个字型数据    dw 0123h 0456h 0789h 0abch 0defh 0fedh 0cbah 0987h    ;设置偏移地址    mov bx 0    ;设置循环次数    mov cx 8    ;将ax寄存器清零    mov ax 0        s:  add ax cs:[bx]    add bx 2    loop s    ;正常结束程序    mov ax 4c00h    int 21h    code ends    end

【2.运行结果是:ax =5EAE】

    assume cs:code    ;代码段    code segment    ;定义8个字型数据    dw 0123h 0456h 0789h 0abch 0defh 0fedh 0cbah 0987h    ;将代码段设置为数据段    mov ax cs    mov ds ax    ;设置偏移地址    mov bx 0    ;设置循环次数    mov cx 8    ;将ax寄存器清零    mov ax 0        s:  add ax ds:[bx]    add bx 2    loop s    ;正常结束程序    mov ax 4c00h    int 21h    code ends    end

解决方案

这两个答案都是错的,正确答案是4BDB

解决方案二:
看上去第一个程序没有问题。ds有它特定的作用,你为什么要用它呢。

解决方案三:
程序有问题,
code段开头的是数据,而你又没指定程序的开始标志,所以那段数据就被当做程序执行了。
应该

code    segment    dw   xxxx。。。。start:    。。。code    endsend    start    ;指定重start标号处开始程序
时间: 2024-10-22 21:45:32

代码段使用数据-汇编:在代码中使用数据,见代码的相关文章

java-当用JDBC向数据库中插入数据或从数据库中提取数据时,为何有时中文字符会显示为乱码?

问题描述 当用JDBC向数据库中插入数据或从数据库中提取数据时,为何有时中文字符会显示为乱码? 当用JDBC向数据库中插入数据或从数据库中提取数据时,为何有时中文字符会显示为乱码? 怎么才能解决问题,跟jdbc driver Manager的设置有关系吗? 解决方案 数据库字符集 与 页面编码 都使得 是 uft-8?得统一 解决方案二: 建议编码格式采用UTF-8的格式 解决方案三: 在使用数据的每一个节点上,其编码方式必须要一致否则就会出现乱码.特别是使用MySQL时,客户端,连接器.数据库

以关键代码段为例子详细讲解多线程中的同步技术

    说线程就要说到进程每一个exe文件运行的时候 系统就会为这个进程分配虚拟空间  ,多个进程在逻辑上重复使用该空间  .     线程实际上是程序真正的功能实现者,一个进程包含多个线程 ,线程之间相互协作共同完成一项任务 .     每个进程中的多个线程可以共享进程中的数据 . 每个进程都有一个唯一称为主线程的线程 ,例如 mian()函数所在的线程就是主线程  .     有些CPU只支持单线程技术 但是我们仍然可以使用多线程是因为 操作系统给每个线程分配了 一个时间片 这个时间片很短

对Excel数据区域或表中的数据进行排序

对Excel数据进行排序是数据分析不可缺少的组成部分.您可能需要执行以下操作:将名称列表按字母顺序排列;按从高到低的顺序编制产品存货水 平列表,按颜色或图标对行进行排序.对数据进行排序有助于快速直观地显示数据并更好地理解数据,有助于组织并查找所需数据,有助于最终做出更有效的决策. 注释 若要查找某个单元格区域或某个表中的上限或下限值(如前 10 名或后 5 个销售额),可以使用自动筛选或条件格式. 了解排序 可以对一列或多列中的数据按文本(升序或降序).数字(升序或降序)以及日期和时间(升序或降

数据专递-将一个数据库中的数据存入另一个数据库

问题描述 将一个数据库中的数据存入另一个数据库 将一个多字段的数据库中的数据存入到另一个少字段的数据库并且取过多字段数据库中的状态需要发生变化,

上报数据,与数据库中的数据对比得到不同的记录

问题描述 具体需求是这样的:客户上传一个文件,取出文件内容.与数据库中的内容对比数据量1W个左右比如说文件内容idnameagetel等表idnameagetel等(id是唯一)需要查询的表,不值一个表,需要连表查询.但ID是唯一的由取得文件的id查询查数据库的id然后与文件的name,age,tel与查询出来的对比.如果一个IDname不同就得到一条不同的记录如果一个IDname,age都不同就得到两条记录数据库是oracle,需要查询的几张表中,有个别表数据比较多.怎么优化流程?提高效率?请

DataSet中的数据在与GridView中绑定数据中间的转换

问题描述 我从数据库里读取一个字段,它的类型是int类型.然后我生成DataSet,但是我绑定到GridView上时,我想让他原本显示的数字换成文字,比如,DataSet.Rows[0]["Field1"]中的1,就显示为"一等",2就显示为"二等",各位能帮忙想个思路么..此问题关键就是字段中的数据类型为int类型,而我要显示的是string类型...在DataSet和最终显示的GridView控件中有一个转换的过程,不知能不能实现.. 解决方

如何在程序运行读取数据时文本框中的数据不断的累加

问题描述 大家帮帮忙!在这里谢谢你们. 解决方案 解决方案二:用textBox1.Text+=str;连加累集

gdn-要求在一个 0 级代码段中将源数据段中的一段数据传输到目标数据段中段描述符均放臵在全局描述符表 GDT 中。

问题描述 要求在一个 0 级代码段中将源数据段中的一段数据传输到目标数据段中段描述符均放臵在全局描述符表 GDT 中. 这个怎么弄啊 要求在一个 0 级代码段中将源数据段中的一段数据传输到目标数据段中.其中所有 段的段描述符均放臵在全局描述符表 GDT 中. 解决方案 具体来说可以这么实现: 在程序开始声明一个数据段? DSEG?,来描述这三个段的描述符,其中有代码段描述符CODEM,源数据段描述符 DATAS 和目标数据段描述符 DATAD,将它们相应的选择子分别定义为 CODEM_SEL,

linux进程的堆栈空间_代码段(指令,只读)、数据段(静态变量,全局变量)、堆栈段(局部变量)、栈【转】

转自:http://blog.csdn.net/gongweijiao/article/details/8207333 原文参见:http://blog.163.com/xychenbaihu@yeah/blog/static/132229655201215115845553/    一)概述 .堆栈是一个用户空间的内存区域,进程使用堆栈作为临时存储.   .堆栈中存放的是函数中的局部变量,在函数的生命周期中可以将变量压入堆栈,编译器需要确保堆栈指针在函数退出前恢复到初始位置,也就是说,内存是自