汇编语言DIV WORD PTR[DI]什么意思
时间: 2023-11-13 12:04:38 浏览: 194
汇编语言中的`DIV`是除法指令,用于将寄存器中的值除以给定的源操作数。例如,`DIV AX`将`AX`寄存器中的值除以源操作数,并将商存放在`AX`寄存器中,余数存放在`DX`寄存器中。
`WORD PTR`是一个指令前缀,用于告诉汇编器操作数的大小。在这个例子中,它告诉汇编器要对`DI`寄存器中存储的16位数据进行操作。
因此,`DIV WORD PTR[DI]`的含义是将`AX`寄存器中的值除以`DI`寄存器中存储的16位数据,并将商存放在`AX`寄存器中,余数存放在`DX`寄存器中。
相关问题
DIV WORD PTR[DI]
这是汇编语言中的一条指令,用于将指向内存地址的 DI 寄存器中的值所指向的字(16位)存储到 DIV 指令后面的寄存器中。具体操作取决于 DIV 指令后面的寄存器,例如:
- 如果 DIV 后面是 AX 寄存器,则将 DI 指向的字除以 AX 寄存器中的值,并将商存储在 AL 中,余数存储在 AH 中。
- 如果 DIV 后面是 BX 寄存器,则将 DI 指向的字除以 BX 寄存器中的值,并将商存储在 AL 中,余数存储在 AH 中。
需要注意的是,DIV 操作只能用于无符号数的除法运算,如果被除数或除数是有符号数,需要先进行转换。
用汇编语言写一个带注释的电子表
下面是一个用汇编语言写的简单的电子表,带有注释说明每一行代码的作用:
```
; 设置段地址为0B800h,这是显存地址,可以在屏幕上显示字符
MOV AX, 0B800h
MOV DS, AX
; 清屏,把显存中的每个字符都设置为空格
MOV AX, 0
MOV CX, 80*25 ; 80个字符一行,共25行
MOV DI, 0
CLEAR_SCREEN:
MOV WORD PTR [DI], 0x0720 ; 0x07表示白色,0x20表示空格
ADD DI, 2
LOOP CLEAR_SCREEN
; 初始化时间,设置小时、分钟、秒钟的初始值
MOV AH, 2CH ; 获取系统时间
INT 21H
MOV BL, CH ; 小时
MOV CL, DH ; 分钟
MOV DL, 0 ; 秒钟
; 显示时间
DISPLAY_TIME:
; 显示小时
MOV AX, BL
MOV BX, 10
DIV BX ; AX = BL / 10,余数保存在DX中
ADD AX, 30H ; 转换成字符
MOV WORD PTR [DI], AX ; 在显存中显示
ADD DI, 2
MOV AX, BL
AND AX, 0FH ; AX = BL % 10,去掉高位
ADD AX, 30H ; 转换成字符
MOV WORD PTR [DI], AX ; 在显存中显示
ADD DI, 2
; 显示冒号
MOV AX, 303Ah ; 0x30表示0,0x3A表示冒号
MOV WORD PTR [DI], AX ; 在显存中显示
ADD DI, 2
; 显示分钟
MOV AX, CL
MOV BX, 10
DIV BX
ADD AX, 30H
MOV WORD PTR [DI], AX
ADD DI, 2
MOV AX, CL
AND AX, 0FH
ADD AX, 30H
MOV WORD PTR [DI], AX
ADD DI, 2
; 显示冒号
MOV AX, 303Ah
MOV WORD PTR [DI], AX
ADD DI, 2
; 显示秒钟
MOV AX, DL
MOV BX, 10
DIV BX
ADD AX, 30H
MOV WORD PTR [DI], AX
ADD DI, 2
MOV AX, DL
AND AX, 0FH
ADD AX, 30H
MOV WORD PTR [DI], AX
ADD DI, 2
; 延时1秒
MOV CX, 1000h
CALL DELAY
; 秒钟加1,如果达到60,则分钟加1,小时加1(如果小时达到24,则归零)
INC DL
CMP DL, 60
JNE NO_MINUTE
MOV DL, 0
INC CL
CMP CL, 60
JNE NO_HOUR
MOV CL, 0
INC BL
CMP BL, 24
JNE NO_HOUR
MOV BL, 0
NO_HOUR:
NO_MINUTE:
; 跳回显示时间的循环
JMP DISPLAY_TIME
; 延时函数,用于让程序暂停1秒
DELAY:
PUSH CX
PUSH DX
MOV CX, AX
MOV DX, 0FFFFh
DELAY_LOOP:
DEC DX
JNZ DELAY_LOOP
DEC CX
JNZ DELAY_LOOP
POP DX
POP CX
RET
```
这个程序将会在屏幕上显示当前的时间,并且每隔一秒钟更新一次。在程序开始时,它会清空屏幕,然后获取系统时间,并把小时、分钟、秒钟的初始值保存下来。然后程序进入一个循环,每次循环都会显示当前的时间,并把秒钟加1。如果秒钟达到60,则分钟加1,小时加1(如果小时达到24,则归零)。程序会一直循环下去,直到用户按下Ctrl+C或者强制结束程序。
相关推荐
![](https://img-home.csdnimg.cn/images/20210720083646.png)
![docx](https://img-home.csdnimg.cn/images/20210720083331.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)