BUF1 DB 3 DUP(0,2 DUP (1,2),3) COUNT EQU $-BUF1 符号COUNT等价的值是( B) A.6 B.18 C.16 D.9
时间: 2024-02-10 11:03:51 浏览: 245
首先,BUF1是一个长度为9字节的字节数组,其中包含3个长度为3字节的元素。每个元素包含一个字节值为0,两个字节值为1,两个字节值为3。因此,BUF1 的内容如下:
```
BUF1: 00 11 11 22 22 33 33
```
接着,COUNT 的值等于 $-BUF1$,即 COUNT 是 BUF1 的地址的补码。因为 BUF1 是 9 字节长的数组,所以 COUNT 的值为 9 的负数,即:
```
COUNT = -9 = FFFFFFF7H
```
因此,符号 COUNT 等价的值是 9 的补码,即 00000009H,而不是选项 B 中的 18。正确答案是 D.9。
相关问题
已知数据段定义如下: DATA SEGMENT VA DB 10H VB DW 3*20 MSG DB 'HELLO!' COUNT EQU 2 BUF DW COUNT DUP (5.3 DUP (1.2).0) DATA ENDS 请画出数据段中数据存放情况
很抱歉,由于我是一名语言模型,无法进行图像绘制。但是,我可以向您描述数据段中数据的存放情况。
首先,数据段的起始地址为 VA,其中包含以下数据:
- 1个字节大小的变量 VA,初始值为 10H
- 1个字大小的变量 VB,初始值为 3*20
- 6个字节大小的字符串 MSG,初始值为 'HELLO!'
- 1个字大小的常量 COUNT,值为 2
- 一个大小为 COUNT*2 字节的数组 BUF,初始值为 (5.3 DUP (1.2).0)
因此,数据段中数据的存放情况如下图所示:
```
┌────────┬────────┬──────────┬────────┬────────────────────┬──────────────────────────────────┐
│ 10H │ 60H │ 48H 45H │ 2 │ 01H 02H 01H 02H │ 01H 02H 01H 02H 01H 02H 00H 00H ... │
├────────┴────────┴──────────┴────────┴────────────────────┴──────────────────────────────────┤
│ 数据段 │
└─────────────────────────────────────────────────────────────────────────────────────────────┘
```
其中:
- VA 占用 1 字节,存放在地址 VA 处
- VB 占用 2 字节,存放在地址 VA+1 处和 VA+2 处
- MSG 占用 6 字节,存放在地址 VA+3 处到 VA+8 处
- COUNT 占用 2 字节,存放在地址 VA+9 处和 VA+10 处
- BUF 占用 COUNT*2=4 字节,存放在地址 VA+11 处到 VA+14 处。BUF 中的数据按照给定的初始化值存放,其中每个元素占用 2 字节。
列出所编写的汇编源程序的代码,对主要语句进行注释 datas segment stoktab db '11','Excavators' db '12','Lifters' db '13','Presses' db '14','Valves' db '15','Processors' db '16','Pumps' LEN EQU $-stoktab string1 db 0DH,0AH,'Please input the number:$' string2 db 0DH,0AH,'Not in table$' BUF1 db 0DH,0AH,50 DUP(0) BUF2 db 81,0,80 DUP(0) datas ends stacks segment DB 100 DUP(0) stacks ends codes segment assume cs:codes,ds:datas,ss:stacks start: mov ax,datas mov ds,ax ; 获取用户输入的编号 mov es,ax lop1: LEA dx,string1 mov ah,09h int 21h ; 调用DOS中断,将输入的字符存入AL lea dx,buf2 mov ah,0ah int 21h cmp [buf2+2],'Q' jz exit mov al,[buf2+1] cmp al,2 jnz no cmp [buf2+2],'1' jnz no mov al,[buf2+3] cmp al,'6' ja no mov cl,al and cx,0fh lea di,stoktab mov al,31h cld ;以上为条件判断 lop2: push cx mov cx,len repnz scasb inc di pop cx loop lop2 mov si,1 mov bx,di dec bx mov cx,len lop3: inc si inc bx mov al,[bx] cmp al,'A' jb next2 mov [buf1+si],al loop lop3 next2: mov [buf1+si],'$' lea dx,buf1 mov ah,09h int 21h jmp lop1 no: lea dx,string2 mov ah,09h int 21h jmp lop1 exit: mov ah,4ch int 21h mov ah,4ch; 调用DOS中断,结束程序运行 int 21h codes ends end start
这是一段汇编语言的代码,主要功能是输入一个数字,然后查找该数字对应的名称,并将名称输出。下面是代码的注释:
datas segment
stoktab db '11','Excavators' ; 存储编号和名称
db '12','Lifters'
db '13','Presses'
db '14','Valves'
db '15','Processors'
db '16','Pumps'
LEN EQU $-stoktab ; 计算stoktab的长度
string1 db 0DH,0AH,'Please input the number:$' ; 输入提示语句
string2 db 0DH,0AH,'Not in table$' ; 错误提示语句
BUF1 db 0DH,0AH,50 DUP(0) ; 用于存储输入的字符
BUF2 db 81,0,80 DUP(0) ; 用于存储用户输入的数字
datas ends
stacks segment
DB 100 DUP(0) ; 定义堆栈
stacks ends
codes segment
assume cs:codes,ds:datas,ss:stacks
start:
mov ax,datas ; 将数据段地址存入AX
mov ds,ax ; 将数据段地址存入DS
; 获取用户输入的数字
mov es,ax
lop1:
LEA dx,string1 ; 输出提示语句
mov ah,09h
int 21h
; 将用户输入的字符存入BUF2
lea dx,buf2
mov ah,0ah
int 21h
; 判断用户是否输入了Q,若是则退出程序
cmp [buf2+2],'Q'
jz exit
; 判断用户输入的数字是否在表中
mov al,[buf2+1]
cmp al,2
jnz no
cmp [buf2+2],'1'
jnz no
mov al,[buf2+3]
cmp al,'6'
ja no
; 在stoktab中查找对应的名称
mov cl,al
and cx,0fh
lea di,stoktab
mov al,31h
cld
lop2:
push cx
mov cx,len
repnz scasb
inc di
pop cx
loop lop2
; 将名称存入BUF1并输出
mov si,1
mov bx,di
dec bx
mov cx,len
lop3:
inc si
inc bx
mov al,[bx]
cmp al,'A'
jb next2
mov [buf1+si],al
loop lop3
next2:
mov [buf1+si],'$'
lea dx,buf1
mov ah,09h
int 21h
jmp lop1
no:
lea dx,string2 ; 输出错误提示语句
mov ah,09h
int 21h
jmp lop1
exit:
mov ah,4ch ; 结束程序运行
int 21h
codes ends
end start
阅读全文