MOV AX , [BX+BP+0100H] 这个程序是否正确
时间: 2023-05-27 15:02:08 浏览: 95
不正确。MOV指令的语法应为MOV destination, source。而此处的指令MOV AX, [BX BP 0100H]中,[BX BP 0100H]并不是一个有效的源地址。应该写为MOV AX, [BX+BP+0100H],其中+表示地址偏移量。
相关问题
xor bx,bx mov ah,51h int 21h mov ax,bx mov bx,bp add bx,aapsp-a ;add bx,0010h ;mov [bx],bx mov [bx],cs mov bx,bp add bx,aaip-a mov ax,[bx] mov bx,bp add bx,myip-a mov [bx],ax mov bx,bp add bx,aacs-a mov ax,[bx] mov bx,bp add bx,mycs-a mov [bx],ax mov bx,bp add bx,aalarge-a mov ax,[bx] mov bx,bp add bx,mylarge-a mov [bx],ax这段代码是什么意思
这段代码是汇编语言代码,大概的含义如下:
1. `xor bx,bx`:将寄存器 bx 的值清零。
2. `mov ah,51h`:将寄存器 ah 的值赋为 0x51。
3. `int 21h`:调用 21h 号中断,即 DOS 系统调用,参数由寄存器 ah 和其他寄存器指定,此处调用的是 0x51 号功能,用于获取当前的 DOS 空闲内存大小。
4. `mov ax,bx`:将 bx 的值复制到 ax。
5. `mov bx,bp`:将栈底指针 bp 的值赋给 bx。
6. `add bx,aapsp-a`:将 aapsp 段的偏移地址加到 bx 中,其中 aapsp 是一个标号,a 是段名,表示 aapsp 所在的段地址,-a 是段地址 a 的基地址(段地址和基地址的概念请参考汇编语言相关的知识)。
7. `mov [bx],cs`:将当前代码所在的段地址 cs 存储到 bx 指向的内存地址中。
8. `mov bx,bp`:将栈底指针 bp 的值赋给 bx。
9. `add bx,aaip-a`:将 aaip 段的偏移地址加到 bx 中,其中 aaip 是一个标号,a 是段名,表示 aaip 所在的段地址,-a 是段地址 a 的基地址。
10. `mov ax,[bx]`:将 bx 指向的内存地址中的 16 位数据读取到寄存器 ax 中。
11. `mov bx,bp`:将栈底指针 bp 的值赋给 bx。
12. `add bx,myip-a`:将 myip 段的偏移地址加到 bx 中,其中 myip 是一个标号,表示 myip 所在的段地址。
13. `mov [bx],ax`:将寄存器 ax 中的值存储到 bx 指向的内存地址中。
14. `mov bx,bp`:将栈底指针 bp 的值赋给 bx。
15. `add bx,aacs-a`:将 aacs 段的偏移地址加到 bx 中,其中 aacs 是一个标号,表示 aacs 所在的段地址。
16. `mov ax,[bx]`:将 bx 指向的内存地址中的 16 位数据读取到寄存器 ax 中。
17. `mov bx,bp`:将栈底指针 bp 的值赋给 bx。
18. `add bx,mycs-a`:将 mycs 段的偏移地址加到 bx 中,其中 mycs 是一个标号,表示 mycs 所在的段地址。
19. `mov [bx],ax`:将寄存器 ax 中的值存储到 bx 指向的内存地址中。
20. `mov bx,bp`:将栈底指针 bp 的值赋给 bx。
21. `add bx,aalarge-a`:将 aalarge 段的偏移地址加到 bx 中,其中 aalarge 是一个标号,表示 aalarge 所在的段地址。
22. `mov ax,[bx]`:将 bx 指向的内存地址中的 16 位数据读取到寄存器 ax 中。
23. `mov bx,bp`:将栈底指针 bp 的值赋给 bx。
24. `add bx,mylarge-a`:将 mylarge 段的偏移地址加到 bx 中,其中 mylarge 是一个标号,表示 mylarge 所在的段地址。
25. `mov [bx],ax`:将寄存器 ax 中的值存储到 bx 指向的内存地址中。
具体这段代码的作用需要结合上下文才能理解。
给出以下汇编语言代码的完整的注释data segment shuc db 'draw a yuan: $' hua1 db 'input yuanxin and banjing(example:310,220 200): $' zifu db 20 dup(0) ;此段用以临时存放输入字符 shu db 20 dup(0) ;再次存放输入数字的ASCII码转换华为的数字 suan db 24 dup(0) ;用来存放计算圆过程中产生的临时数据 data ends stack segment stk db 16 dup(0) stack ends code segment assume cs:code, ds:data,ss:stack start: mov ax,data mov ds,ax mov ax,stack mov ss,ax mov dx,offset shuc call showmsg call input mov al,ds:[si] and al,11011111b cmp al,43h draw1: mov dx,offset hua1 call showmsg call input call zhuanshu call moshi mov bx,offset shu mov ax,ds:[bx] mov si,ax mov ax,ds:[bx+2] mov di,ax mov ax,ds:[bx+4] call drawyuan mov ax,4c00h int 21h input: mov bx,0 mov cx,20 re: mov ah,1h int 21h cmp al,0dh jz scx mov si,offset zifu mov [bx][si],al inc bx loop re ret scx: mov cx,0 ret showmsg: mov ah,9h int 21h ret moshi: mov al,12h mov ah,0 int 10h ret zhuanshu: mov bx,offset zifu mov bp,offset shu mov cx,16 mov si,0 mov di,0 lei: mov al,ds:[bx][si] cmp al,0 jz scx sub al,30h mov dl,100 mul dl mov word ptr ds:[bp][di],ax mov ax,0 mov al,ds:[bx][si+1] sub al,30h mov dl,10 mul dl add ax,word ptr ds:[bp][di] mov word ptr ds:[bp][di],ax mov ax,0 mov al,ds:[bx][si+2] sub al,30h add ax,word ptr ds:[bp][di] mov word ptr ds:[bp][di],ax add si,4 add di,2 loop lei ret drawyuan: mov bx,offset suan mov word ptr ds:[bx],si mov word ptr ds:[bx+2],di sub si,ax mov word ptr ds:[bx+4],si sub di,ax mov word ptr ds:[bx+6],di shl ax,1 mov cx,ax mov word ptr ds:[bx+10],ax shr ax,1 xor dx,dx mul ax mov word ptr ds:[bx+12],ax mov word ptr ds:[bx+14],dx hang: push cx mov cx,ds:[bx+10] mov dx,di mov si,ds:[bx+4] lie: push cx push dx xor dx,dx mov cx,si mov ax,si sub ax,ds:[bx] xor dx,dx imul ax mov word ptr ds:[bx+16],ax mov word ptr ds:[bx+18],dx mov ax,di sub ax,ds:[bx+2] xor dx,dx imul ax add ax,ds:[bx+16] adc dx,ds:[bx+18] mov word ptr ds:[bx+20],ax mov word ptr ds:[bx+22],dx pop dx mov ax,ds:[bx+22] cmp ax,ds:[bx+14] jne kong mov ax,ds:[bx+12] sub ax,ds:[bx+20] cmp ax,500 ja kong mov ah,0ch mov al,5h int 10h kong: pop cx inc si loop lie pop cx inc di loop hang ret code ends end start
这段汇编代码是画圆的程序,其中包含了一些注释。
首先是数据段,其中定义了一些变量,如存放字符的数组,存放数字的数组,以及存放计算圆过程中产生的临时数据的数组。
接下来是堆栈段,用于存放程序运行时的栈空间。
最后是代码段,起始地址为start。程序开始时,将数据段和堆栈段的地址分别存入DS和SS寄存器中。然后调用showmsg过程,输出“draw a yuan:”这个字符串,再调用input过程,等待用户输入圆心和半径。接下来是一些数值转换的过程,将用户输入的数字转化为程序所需的格式。然后调用drawyuan过程,画出圆。最后调用int 21h,退出程序。
在代码段中,还有一些过程,如input过程用于读取用户输入,showmsg过程用于显示字符串,zhuanshu过程用于将用户输入的数字转化为程序所需的格式,moshi过程用于设置显示模式,drawyuan过程用于画圆。这些过程都有相应的注释说明其功能。
阅读全文