-
1.如果数据段未结束,请添加 dseg ends2声明数据时,db后面应该有空格,你不是自由的。
3.第十三次应该是测试,而不是文本
更正如下:dseg 段
strn db 'abcdefghijklmnopquvw','$'
n db ?
dseg ends
cseg segment
assume cs: cseg, ds: dsegstart: mov ax, dseg
mov ds, ax
lea si, strn
mov dl,0
again: mov al,[si]
cmp al,'$'
je done
test al,0ffh
jpe next
or al,80h
mov [si],al
inc dl
next: inc si
jmp again
done: mov n,dl
mov ah,4ch
int 21h
cseg ends
end start
-
这有点不对劲。
data segment
da1 dw 1234h,5678h,3456h,0a53h ;开口数。
count equ ($da1)/2
pfg db count dup (0) ;保存平方根。
data ends
stack1 segment para stackdw 20h dup (0)
stack1 ends
code segment
assume cs: code,ds:data,ss:stack1being: mov ax , data
mov ds , ax
mov cx , count
lea si , da1
lea di , pfg
lop: mov ax , si] ;取要打开的方格数。
push cx ;保存信息。
call sqr_proc ;调用子例程。
mov [di] ,cl ;保存平方根。
pop cx ;恢复信息。
add si , 2 ;修改指针。
inc di
loop lop
mov ah , 4ch
int 21h
sqr_proc proc ;打开平方根子例程。
xor cl ,cl
mov dx ,1
sqr: sub ax , dx
jb exit
inc cl
add dx , 2
jmp sqr
exit: ret
sqr_proc endp
code ends
end being
-
操作步骤如下: <>
经过测试,程序的功能可以满足问题的要求。
-
20000h单元的内容为20 h,20006h单元的内容为33 h,SI的内容为000c h,MOV SI后,执行偏移B2。
第三个空白应填写为 000c。
关键是这句话:b1 db'3ac5$ 空'
注意? 这里面有一个“空间”。
楼上的两人都低估了“空间”。
-
首先,标题本身有一点错误。
B2 dB B1 错误,应更改为 B2 DW B1。
由于 b1 用于数据定义的操作数,因此它表示其 16 位偏移地址,不能在 db 定义的 8 位变量中使用。
分析数据段中的数据存储情况
物理地址数据。
20000h 20h ;W1 的第一个站点是 3220001h 20h
20002h ffh ;W2地址,每个地址占两个字节20003h ffh
20004h 41h
20005h 00h
20006h 33h ;B1,第一个是“3”
20007h 41h ;这是“一个”
20008h 43h ;这是“c”
20009h 35h ;这是“5”
2000ah 24h ;它是'$'
2000bh 06h ;B2 的第一个地址存储在 B1 的偏移地址 0006h
2000ch 00h
存储数据后,很容易找到答案。
1.20000h单位的内容是十进制数32,即20h2单元20006h的内容为33h
3.偏移量 B2 是 B2 000BH 的偏移地址
-
m1 db 32,20h
m2 dw -1,41h
b1 db '3ac5$'
b2 db b1
标签的实际含义是线段的偏移地址,其中m1=0000h,m2=0002h,b1=0006h,b2=000bh
加载标签有两个常用值:MOV 命令模式需要偏移量来修改标签,而 LEA 命令模式不需要偏移量修改。
数据段开头的地址是20000h,表示段偏移地址从0000h开始的单位,即M1处的单位内容为十进制数32,即十六进制表示为20h,20006h表示0006h,即B1处的单位内容, 这是 3 的 ASCII 代码,十六进制是 33h
mov si,offset b2 相当于 lea si,b2; si=b2=000bh
这是一个基本问题。
-
不保证是对的。
3 ax bx cx dx
4 4200h
5 订单。 结构 分支结构 环状结构。
7 d8 a
9 c10 d
11 a12 b
13 将汇编语言源程序翻译成目标程序。
14 即时寻址 寄存器寻址 直接寻址寄存器 间接寻址寄存器 相对寻址 基址加变量寻址 相对基址加变量寻址。
15 数据传输 算术运算 逻辑运算 串行运算 程序控制 处理器控制 16 用于告诉汇编者如何组装的指令。
17 1.分析问题并抽象出描述问题的数据模型 2.确定问题的算法思路 3.绘制流程图或结构图 4.分配内存和工作单元(寄存器) 5.逐个编写程序 6.在计算机上进行静态检查和调试。
18 初始化部分 环体部分 调整部分 控制部分 19 in al, 21h
mov dx,1200h
out dx,al
20 mov ax,12h
mov bx,34h
mov cl,8
shl ax,cl
or ax,bx
21 codes segment
assume cs:codes
start:
mov bx,1010101010101010bmov cx,4
s1:mov bp,4
xchg cx,bp
rol bx,cl
xchg cx,bp
mov ax,bx
and ax,0fh
cmp ax,10
jb s2add ax,7
s2:add ax,30h
mov dx,ax
mov ah,2
int 21h
loop s1
mov ah,4ch
int 21h
codes ends
end start
-
if (interrupt enable) - 位 9,中断权限标志。 控制处理器对可屏蔽硬件中断请求的响应。 设置 1 可启用可屏蔽硬件中断响应,设置 0 可关闭可屏蔽硬件中断响应。
执行 int8 后,if 标志从“允许中断 (EI)”更改为“禁止中断”(DI),即从“1”变为“0”。 因此,x2xx 变为 x0xx。
CPL、IOPL 和控制寄存器 CR4 中的 VME 标志确定 CLI、STI、POPF、POPFD 和 IRET 指令是否可以修改 IF 标志。
希望它有所帮助。
-
标志的 0200h 位 IF 是中断允许标志,0 表示禁止响应硬件中断,1 表示允许硬件中断。
执行CLI命令后,if=0; 执行 STI 后,if=1
当中断器结束时,它包含 popf 并恢复之前的标志
-
在 16 位汇编语言中,物理地址 = 段地址 * 16(即十六进制为 10h,即二进制中左移 4 位,或卦中左移 1 位)+ 偏移地址,构成一个 20 位地址(因为 8086CPU 有一条 20 位地址线)。 所以这个问题的PA=DS*16+1352H=10000+1352=11352H(通常表示为1000:1352)。
指令 mov ax [1352h] 是将存储在地址 1000:1352h(默认段地址为 DS)的数据发送到寄存器 ax(未计算,此处地址为 1000; 1352h 处的值应为 26ffh),其中 AH 为 8 位高,Al 为 8 位低。
希望它有所帮助。
-
ob4h对应的二进制为10110100,第一位为符号位,即1。
如果是无符号的,则为10110100,如果转换为十进制,则为180,如果有符号,则为-0110100,如果转换为十进制,则为-76。
11h对应的二进制是10001,完成8位是00010001,第一个数字是符号位,是0。
如果认为是无符号的,则为00010001,如果转换为十进制,则为17,如果视为有符号,则为+0010001,转换为十进制的17。
可以看出,由于第一个位置是0,所以不管是有符号还是无符号都是一样的。
如果第一个数字是1,则有符号时为负数,无符号时为整数,结果不同。
-
有符号数字,由补语表示。
房东去看了补品的相关知识,没有这样的问题。 参考。
-
0b4h=1|011,0100b
011h=0|001,0001b
注意:“|“Before is the sign bit”是一个四位分隔符。
我看不懂了,辅导源码,补码的知识。
-
mov si,0024h ;si=24h
mov bx, si ;bx=24h
mov si,[si] ;si=6f72h
or si,0ffh ;si=6fffh
and si,[bx] ;si=6f72h
执行上述程序片段后,(si)=6f72h,(cf)=0,of=0;
我也有 0 个基本编程。
从王爽老师的《汇编语言》一书开始,通俗易懂,如果不是这本书,也许我早就放弃学习编程了,学完这个看了谭浩强的《C语言编程》,只看前几章,以win32汇编为基础,Windows下的汇编和C很像, 再学习罗云斌的《Windows环境下的32位汇编语言编程》,学完这本书就上手了。 >>>More
mov dx,3 是初始化 dx,注意 dx 中的二进制是 0000 0000 0000 0011,稍后会用到。 >>>More