各位高手帮我解决一个汇编程序吧

有以下程序段:
DATA SEGMENT
ORG 30H
CONT1 EQU 10H
S1 DB ‘MS-DOS’
DB 00H,0AH
CONT2 EQU $-S1
S2 DW ‘MS’,‘·’,‘DOS’,0D0AH
DATA ENDS
试问在数据段中:
(1)S1,S2的偏移地址分别是多少?
(2)求CONT2的值?
(3)指出字节单元S2+4的内容是多少?
拜托各位了,我很急要答案,先谢谢了
麻烦告诉我一些过程好吗
实在不明白答案是啥意思
EQU是什么意思?

(1)org是指定地址计数器的当前值,也就是说用org指定一个地址后,下面再分配的内存单元就是从指定位置开始。
题目中指定了org 30H,那么下一个要分配的单元就是30H。
而EQU是符号定义伪指令,它定义的符号就相当于C语言里的符号常量,并不占用存储空间。
所以,S1的偏移地址就是30H。
S1占用了8个单元(从30H到37H),下一个要分配的单元就是38H了。同样的道理,S2的偏移地址就是38H。
(2)$-S1
$表示地址计数器的当前值,这个值是38H,S1是30H,相减得到CONT2=8

(3)最后你的题目里有错误:
S2 DW ‘MS’’,‘DOS’,0D0AH
这条伪指令有错误,因为DW定义的数据不能是超过2个字符的字符串。而你这里定义'DOS'肯定是不对的。
所以第三题没有答案。
要是改成这样:S2 DW 'MS','·','DO',0D0AH
那么答案就是‘O’的ASCII码,即4FH。
楼上的第三题答案肯定是不对的,因为至少应该是大写字母的ASCII码吧?(范围在41H——5AH之间啊)
温馨提示:内容为网友见解,仅供参考
第1个回答  2007-04-01
1、 S1是30H,s2是38H
2、count2是8H
3、内容是6f64H

各位高手帮我解决一个汇编程序吧
(1)org是指定地址计数器的当前值,也就是说用org指定一个地址后,下面再分配的内存单元就是从指定位置开始。题目中指定了org 30H,那么下一个要分配的单元就是30H。而EQU是符号定义伪指令,它定义的符号就相当于C语言里的符号常量,并不占用存储空间。所以,S1的偏移地址就是30H。S1占用了8个单元...

求一简单汇编程序
LJMP MAIN ;跳转到 MAIN 程序段.;--- ORG 0023H ;0023H是串行口中断的入口地址,这也是固定的.;下面写的就是串行口中断程序.CLR RI ;RI=1才发生的串口中断,必须清零,否则中断就没有个完了.MOV A, SUBF ;取出串口收到的数据.MOV P2,A ;送到P2口,外接LED...

汇编错误。各位大神帮我看一下这error A2105: Expected: instructio...
Warning: No STACK segment 缺少堆栈段。There was 1 error detected. 发现一个警告错误。这两个提示,都不算错误,一般的小程序都可以正常运行。你在程序中,再加上一个堆栈段,这两行提示就不会出现了。

汇编学着很累,没有C,C++好学,各位高手给点建议吧,谢谢
汇编是除了机器语言最底层的语言了。你可以先学习C ,等有了c的基础以后在学习汇编,你就会知道汇编在一定程度上能让你更深层次的了解你所拥有的语言。汇编是比c,c++麻烦,因为c一条语言能够翻译成几条甚至几十条汇编语言,可是你用C或者c++甚至更高级的语言的时候,你有没有想过这样一个问题,你写...

一个比较简单的汇编宏汇编程序设计 急!急! 非常感谢 (我把分都给你...
MADD1 data1,data2,leng,suma mov ah,7 int 21h mov ax,4c00h int 21h ;利用功能调用返回DOS code ends ;代码段结束 end start ;汇编结束,同时指明程序起始点 运行结果正确:-d0 ::0000 12 34 56 78 90 12 45 73-20 34 12 56 87 90 21 37 ::0010 22 21 09 00 46...

求教一个汇编问题~~怎样输出十进制数的ASCII码。。。
;定义了一个子程序disp来显示ASCII码 ;另外二进制数可以输入,显示十进制数和ascii码 D SEGMENT D1 DB '0123456789ABCDEF'd2 db ' ASCII is:$'D ENDS C SEGMENT ASSUME DS:d,CS:C START: MOV AX,D MOV DS,AX xor bx,bx next: mov ah,1 int 21h cmp al,0dh jz inend and al,0fh...

请问各位高手,如何用汇编语言实现十六进制的书转换成二进制后输出_百度...
这是我曾经写的一个程序,这段代码的作用是循环4次输入4位16进制数,我把它转换位2进制数,方法就是对于每一位数(现在是ASCII码)转化为0——9或a——f的数,然后左移4位,放到一个变量里面,循环就行了,也就是16进制转换为2进制的基本算法,左移4位,不断的进行。。XOR BX,BX ;BX里面放...

想问问各位编程高手最开始的时候是怎么下手的,也可以说是怎么从什么都...
第一个C语言程序,就是那个经典的HelloWorld,我调了几个星期,上机机会非常少,也没有书告诉我开发环境(TC2.0)需要设置,而且开始我都不知道有编译器,我甚至自作聪明把写好的程序扩展名从.c改成.exe,结果可想而知。 大一学完了C、X86的汇编、数据结构、C++。由于精力都花在自学上了,大一下四门课挂了彩,三类...

求解单片机汇编程序中的一条指令
MOV C,20H MOV A,20H 这两条指令看似结构相同,其实是南辕北辙。如果操作数是“C”,那么其后面的20H表示位寻址区的20H(即以字节编址来看是24H的最低位);如果操作数是“A”,那么地址为字节编址的20H。汇编程序会根据操作数C或A自动做出判断20H是字节地址还是位地址。位寻址区的划分是这样...

汇编语言编写一个简单的程序(我学的是汇编语言与接口技术)
JE EXIT ;输入空格符,则程序结束 CMP AL,0DH JE L2 ;输入回车符,则数字输入结束 MOV SI,0 CMP AL,'0'JB L0 CMP AL,'9'JA L0 MOV SI,1 AND AL,0FH XCHG AL,BL MUL BH JC L0 ;乘法溢出,数字大于255 ADD BL,AL JC L0 ;加法溢出,数字大于255 JMP SHORT L1 L2:...

相似回答