3. Các hàm debugging
3.2. Lệnh format
1. Các lệnh T-Monitor hiển thị dấu nhắc “TM>” trên debugging console và chờ lệnh nhập. Các lệnh có định dạng sau.Một dòng có thể chứa đến 256 kí tự.
<tên lệnh > <thông số 1>, <thông số 2>, . . .<CR/LF>
• Một <tên lệnh> không phân biệt chữ hoa hay chữ thường.
• <tên lệnh> và <thông số> đầu tiên được phân cách bằng một khoảng trắng hay tab.
• Mỗi <thông số> được phân cách bằng ‘,’.Nếu một thông số bị bỏ sót,nhập ‘,’ chỉ nhằm cho thông số đó duy trì sự đáp ứng đúng giá trị của tên biến.
Nhiều lệnh có thể nhập trên cùng một dòng phân cách bằng ‘;’.
Dòng bắt đầu bằng ‘*’ được bỏ qua như là dòng chú thích.Một dòng trắng chỉ với CR/LF được bỏ qua.
2. Các code điều khiển
Các code điều khiển sau từ debugger console được hổ trợ. Ctrl-X (0x18), Ctrl-U (0x15) Xóa phần tử dòng Ctrl-H (0x08), DEL (0x7f) Xóa một phần tử kí tự Ctrl-S (0x13, XOFF) Dừng hiển thị scroll Ctrl-Q (0x11, XON) Khôi phục hiển thị scroll Ctrl-C (0x03) Lệnh kill
Ctrl-F (0x06), ESC [ C Dời con trỏ sang phải (!) Ctrl-B (0x02), ESC [ D Dời con trỏ sang trái (Ã) Ctrl-P (0x10), ESC [ A Gọi dòng trước (") Ctrl-N (0x0e), ESC [ B Gọi dòng kế (#) Ctrl-K (0c0b) Xóa sau con trỏ 3. Các giá trị số
Giá trị số sử dụng với những ghi chú sau:
Hecxadecimal H’<chuỗi số hecxa> h’<chuỗi số hecxa> 0x<chuỗi số hecxa> <0 -9> <chuỗi số hecxa>
Số thập phân D’<chuỗi số> d’<chuỗi số>
Octal Q’<chuỗi số bát phân> q’<chuỗi số bát phân> Nhị phân B’<chuỗi số nhị phân> b’<chuỗi số nhị phân> <Số> : ‘0’ đến ‘9’
<Các kí số nhị phân>: ‘0’, ’1’ <Các kí số bát phân>: ‘0’, ‘7’
<Các kí số hecxadecimal>: ‘0’ đến ‘9’,’A’ đến ‘F’,’a’ đến ‘f’ Một chuỗi số mà không có prefix được xem như là chuỗi số hecxadecimal. 4. Các chuỗi kí tự
Một chuỗi kí tự là một chuỗi bất kì nằm trong ‘ ” ’;Chúng được sử dụng như là các thông số với một vài lệnh.
Tên thanh ghi là một kí tự đặc biệt phụ thuộc vào CPU;chúng được sử dụng như là các thông số với một số lệnh.
6. Các biểu thức
Một biểu thức bao gồm các giá trị số hay các tên các thanh ghi được kết hợp bằng các toán tử ‘+’, ‘-‘, ‘*’, ‘/’.Các biểu thức sử dụng như là các thông số đối với một số lệnh.Các tác vụ bao gộp cả ‘*’ và ‘/’ luôn được thực hiện từ trái sang phải.Ten một thanh ghi có nghĩa là giá trị của thanh ghi đó.
Ví dụ:
8000 + d'250 — H’80FA
1000 + 100 * 2 — (H’1000 + H’100) x 2 R0 + 100 — Giá trị của thanh ghi R0 + h’100
‘&’ là một toán hạng chỉ định sự tham khảo gián tiếp, với giá trị của biểu thức chứa đựng nôi dung địa chỉ bộ nhớ.
Ví dụ:
AC000000 + 4 - H'AC000000 nội dung bộ nhớ R0 & + 8 - Một nội dung bộ nhớ của địa chỉ, là nội dung
bộ nhớ được chỉ định bởi giá trị của thanh ghi R0 + 8
Các biểu thức có thể sử dụng trong giá trị các tham số (địa chỉ,kích thước, .v.v.) với tất cả các lệnh.
3.3. Danh sách các lệnh
Các ghi chú sau được sử dụng trong lời giải thích các lệnh (foo) Dạng ngắn của lệnh
[foo] Chỉ định lựa chọn
[foo] . . Chỉ định nhiều tùy chọn lặp lại. foo| bar Chọn lựa chỉ định
Byte 8 bits Half-word 16 bits Word 32 bits
Các lệnh T-Monitor được liệt kê bên dưới:
Tên Đặc tả Dump (D) Dump bộ nhớ DumpByte (DB) Dump bộ nhớ DumpHalf (DH) Dump bộ nhớ DumpWord (DW) Dump bộ nhớ Modify (M) Thay đổ bộ nhớ
ModifyByte (MB) Thay đổi bộ nhớ
MonifyHalf (MH) Thay đổi bộ nhớ
ModifyWord (MW) Thay đổi bộ nhớ
Fill (F) Lấp bộ nhớ
FillByte (FB) Lấp bộ nhớ
FillWord (FW) Lấp bộ nhớ
SearchChar (SC) Tìm kiếm bộ nhớ
SearchByte (SCB) Tìm kiếm bộ nhớ
SearchWord (SCW) Tìm kiếm bộ nhớ
Compare (CMP) So sánh bộ nhớ
Move (MOV) Dời bộ nhớ
InputByte (IB) Nhập từ cổng I/O
InputHalf (IH) Nhập từ cổng I/O
InputWord (IW) Nhập từ cổng I/O
OutputByte (OB) Xuất từ cổng I/O
OutputHalf (OH) Xuất từ cổng I/O
OutputWord (OW) Xuất từ cổng I/O
Disassemble (DA) Disassemble
Register (R) Dump/Modify thanh ghi
Go (G) Thực thi chương trình
Breakpoint (B) Thiết lập breakpoint
BreakClear (BC) Xóa breakpoint
Step (S) Step trace
Next (N) Next Trace
BackTrace (BTR) Back Trace
Load (LO) Tải chương trình/dữ liệu
ReadDisk (RD) Đọc đĩa
WriteDisk (WD) Ghi đĩa
InfoDisk (ID) Hiển thị thông tin đĩa
BootDisk (BD) Boot từ đĩa
Kill (KILL) Giết process
Help (H) (?) Hiển thị thông điệp Help
Exit (EX) Thoát Monitor
Bảng 6: Các hàm debug
Dump/DumpByte/DumpHalf/DumpWord
Dump Memory
[Định dạng]
Dump (D) [<start address>] [, {<end address>|#<data count>}] DumpByte (DB) [<start address>] [, {<end address>|#<data count>}] DumpHalf (DH) [<start address>] [, {<end address>|#<data count>}] DumpWord (DW) [<start address>] [, {<end address>|#<data count>}] [Đặc tả]
Hiển thị nội dung bộ nhớ được chỉ định bởi dãy bộ nhớ trong <đơn vị> sau Dump, DumpByte Đơn vị Byte <data count> là trong byte DumpHalf Đơn vị nửa Word <data count> là trong nửa word DumpWord Đơn vị Word <data count> là trong word Dãy địa chỉ của các tác vụ là một trong các dạng sau:
<start address> đến <end address> + <unit> -1
Nếu <start address> hay <end address> không ở một <unit> byte ranh giới, địa chỉ được liên kết với một ranh giới.
Nếu <start address> bị bỏ lỡ,dump bắt đầu từ địa chỉ kế theo sau dãy của lệnh Dump bộ nhớ trước.
Nếu <end address> bị bỏ qua,64 byte của dữ liệu được hiển thị bỏ qua <unit>
Chỉ có thể truy cập vùng nhớ được chỉ định trong dãy,trong đơn vị được chỉ định.Không ghi bộ nhớ bằng lệnh này. [Cách dùng tiêu biểu] TM> Dump AC100000 AC100000: 00 09 80 04 45 03 E0 05 E0 09 00 0A 00 0B 56 0C ....E...V. AC100010: 04 0D 00 0E 03 01 E0 03 E1 05 E8 FF 8E 00 00 00 ... AC100020: 1B D6 1B D6 1B D6 1B D6 9E 00 00 00 8E 00 01 C0 ... AC100030: C6 16 D0 0C 00 FF 80 46 80 10 00 00 88 12 22 4C ...F...''L TM> DumpHalf AC100000, AC100010
AC100000: 0900 0480 0345 05E0 09E0 0A00 0B00 0C56 ....E...V. 80100010 : 040D ..
TM> DumpWord AC100000, #9
AC100000: 04800900 05E00345 0A0009E0 0C560B00 ....E...V. AC100010: 0E000D04 03E00103 FFE805E1 0000008E ...
AC100020: D61BD61B ....
Modify/ModifyByte/ModifyHalf/ModifyWord
Modify Memory
[Định dạng]
Modify (M) [<start address>] [, <set value>].. ModifyByte (MB) [<start address>] [, <set value>].. ModifyHalf (MH) [<start address>] [, <set value>].. ModifyWord (MW) [<start address>] [, <set value>].. [Đặc tả]
Sửa đổi bộ nhớ bắt đầu từ <start address> trong <unit> sau Modify, ModifyByte Đơn vị Byte
ModifyHalf Đơn vị Half-word
ModifyWord Đơn vị Word
Nếu <start address> không là một <unit> byte biên,địa chỉ được liên kết với một biên. Nếu <start address> bị bỏ qua,sự sửa đổi bắt đầu từ địa chỉ kế tiếp sau lần sửa bộ nhớ trước. Một <expression> hay <character string> có thể được chỉ định trong <set value>.Một
<expression> được thiết lập như một <unit> giá trị byte.Một <character string> được thiết lập như là một dãy các byte dữ liệu được gói lại với những những số 0 ở phía cuối để liên kết nó với một <unit> byte biên. <set value> liên tục được chỉ định có thể lên đến tối đa 128 byte.
Nếu <set value> bị bỏ qua, nội dung bộ nhớ được sửa đổi theo sự tác động.Trong chế độ tương quan những kí tự nhập sau có có ý nghĩa đặc biệt.
'.' Dừng thực thi lệnh '^' Trở lại một địa chỉ
(CR/LF only) Nhảy đến địa chỉ kế mà không thiết lập
Việc truy cập chỉ được thực hiện trong phạm vi bộ nhớ được chỉ định,trong đơn vị được chỉ định.Bộ nhớ không được đọc bởi lệnh này, trừ trong chế độ tương tác.
[Cách dùng tiêu biểu] TM> ModifyByte AC100000 AC100000: 00 -> 12 AC100001: 09 -> 34 AC100002: 80 -> ^ AC100001: 34 -> .
TM> ModifyHalf AC100000, "ABCD", 56, 78 TM> ModifyWord AC100000 AC100000: 44434241 -> AC100004: 00780056 -> . Fill/FillByte/FillHalf/FillWord Fill Memory [Định dạng]
Fill (F) <start address>,{<end address>|#<data count>},<set value>[,<set value>].. FillByte (FB) <start address>,{<end address>|#<data count>},<set value>[,<set value>].. FillHalf (FH) <start address>,{<end address>|#<data count>},<set value>[,<set value>].. FillWord(FW)<start address>,{<end address>|#<data count>},<set value>[,<set value>].. [Đặc tả]
Lấp đầy vùng nhớ được chỉ định với một dãy <set value> được lặp lại trong <unit> sau: Fill, FillByte Byte unit <data count> là trong bytes
FillHalf Half-word unit <data count> là trong half-words FillWord Word unit <data count> là trong words Dãy địa chỉ của tác vụ là một trong các dạng sau:
<start address> to <end address> + <unit> - 1
<start address> to <start address> + <data count> x <unit> - 1
Nếu <start address> hay <end address> không ở tại một <unit> byte biên,địa chỉ sẽ được liên kết với một biên.
Một <expression> hay <character string> có thể được chỉ định trong <set value>. Một
<expression> được thiết lập như là một <unit> giá trị byte.Một <character string> được thiết lập như như là một dãy các byte dữ liệu gói với các số 0 ở sau để liên kết nó với một <unit> byte biên.<set value> liên tục được chỉ định có thể được làm tối đa đến 128 byte.
Sự truy cập chỉ được thực hiện trong dãy bộ nhớ được chỉ định,trong đơn vị chỉ định.Không có bộ nhớ được đọc bởi lệnh này.
[Cách sử dụng tiêu biểu]
TM> Fill AC101000, #10, 57 TM> Dump AC101000, #12
AC101000: 57 57 57 57 57 57 57 57 57 57 57 57 57 57 57 57 WWWWWWWWWWWWWWWW
AC101010: 00 00 ..
TM> FillWord AC101000, AC10101f, 12, 34 TM> Dump AC101000, #22
AC101000: 12 00 00 00 34 00 00 00 12 00 00 00 34 00 00 ...4...4 AC101010: 12 00 00 00 34 00 00 00 12 00 00 00 34 00 00 ...4...4
SearchChar/SearchByte/SearchHalf/SearchWord
Search Memory
[Định dạng]
SearchChar (SC) <start address>,{<end address>|#<data count>},
<search value>[,<search value>].. SearchByte (SCB) <start address>,{<end address>|#<data count>},
<search value>[,<search value>].. SearchHalf (SCH) <start address>,{<end address>|#<data count>},
<search value>[,<search value>].. SearchWord (SCW) <start address>,{<end address>|#<data count>},
<search value>[,<search value>].. [Đặc tả]
Tìm nội dung bộ nhớ trong dãy địa chỉ được chỉ định cho dãy <search value> trong <unit> theo sau,và nếu dãy <search value> được tìm thấy,hiển thị địa chỉ bắt đầu của nó.
Việc tìm kiếm kết thúc có thể 64 kết quả được hiển thị.
SearchChar, SearchByte Byte unit <data count> là trong bytes SearchHalf Half-word unit <data count>là trong half-words SearchWord Word unit <data count> là trong words Dãy địa chỉ cho tác vụ là một trong các dạng sau.
<start address> to <end address> + <unit> - 1
<start address> to <start address>+ <data count> x <unit> - 1
Nếu <start address> hay <end address> không ở tại một <unit> byte biên,địa chỉ được liên kết với một biên.
Một <expression> hay <characteer string> có thể được chỉ định trong <search value>. Một <expression> được thiết lập như là một <unit> giá trị byte. Một <character string> là một dãy byte dữ liệu gói với các số 0 ở sau cuối liên kết với một <unit> byte biên.Sự chỉ định <search value> liên tục có thể lên đến 128 byte.
Việc truy cập chỉ được thực hiện trong dãy bộ nhớ được chỉ định,trong đơn vị chỉ định. Việc ghi bộ nhớ không thể thực hiện bằng lệnh này.
[Cách sử dụng tiêu biểu]
TM> SearchChar AC101000, AC10101f, 12 AC101003: AC10100B: AC101013: AC10101B: TM> SearchWord AC101000, #20, 12, 34 AC101000: AC101008: AC101010: AC101018: Compare Compare Memory [Định dạng]
[Đặc tả]
So sánh nội dung vùng nhớ bởi dãy địa chỉ được chỉ định với nội dung vùng nhớ bắt đầu từ <compare address> ,hiển thị địa chỉ có nội dung khác với nội dung địa chỉ tại những địa chỉ đó,trong đơn vị byte.Sự so sánh kết thúc khi 64 kết quả được hiển thị.
Dãy địa chỉ cho tác vụ là một trong các dạng sau: <start address> to <end address>
<start address> to <start address> + <byte count> - 1
Việc truy cập chỉ trên vùng bộ nhớ được chỉ định,trong đơn vị byte.Không thể ghi bộ nhớ bằng lệnh này.
[Cách sử dụng tiêu biểu]
TM> Compare AC100000, AC100fff, AC110000 TM> Compare AC100000, AC100fff, AC120000 AC100020: 34 -> AC120000: 00 AC100021: 56 -> AC120000: 00 : : Move Move Memory [Định dạng]
Move (MOV) <start address>, {<end address>|#<byte count>}, <destination address> [Đặc tả]
Dời nội dung bộ nhớ trong dãy địa chỉ được chỉ định vào <destination address>.Có thể có sự chồng lên nhau giữa source và dãy địa chỉ đích.
Dãy địa chỉ của tác vụ ở một trong các dạng sau: <start address> to <end address>
<start address> to <end address> + <byte count > -1
Tác vụ này không ghi vào source bộ nhớ và không đọc từ địa chỉ đích.
Việc truy cập chỉ diễn ra ở vùng nhớ được chỉ định,theo đơn vị byte.Không ghi vào source bộ nhớ bằng lệnh này,và không đọc vùng nhớ đích.
[Cách sử dụng tiêu biểu]
TM> Move AC100000, #1000, AC110000
InputByte/InputHalf/InputWord
Input from I/Oport
[Định dạng]
InputByte (IB) <I/O address> InputHalf (IH) <I/O address> InputWord (IW) <I/O address> [Đặc tả]
Đọc và hiển thị dữ liệu từ <I/O address> được chỉ định theo <unit> sau: InputByte đơn vị Byte
InputHalf đơn vị Half-Word InputWord đơn vị Word
Lỗi kết quả nếu <I/O address> không là một <unit> byte biên.
Việc truy cập chỉ được thực hiện ở địa chỉ I/O được chỉ định, theo một đơn vị được chỉ định.Không ghi cổng I/O bằng lệnh này.
Trong một hệ thống memory-mapped I/O, địa chỉ bộ nhớ được chỉ định được truy cập như là một địa chỉ I/O. [Cách sử dụng tiêu biểu] TM> InputByte 310 310: 5F OutputByte/OutputHalf/OutputWord
Output to I/O Port
[Định dạng]
OutputByte (OB) <I/O address>,<byte data> OutputHalf (OH) <I/O address>,<half-word data> OutputWord (OW) <I/O address>,<word data> [Đặc tả]
Ghi dữ liệu theo các đơn vị sau trong <I/O address> được chỉ định OutputByte đơn vị Byte
OutputHalf đơn vị Half OutputWord đơn vị Word
Lỗi kết quả nếu <I/O address> không là một <unit> byte biên
Việc truy cập chỉ được thực hiện trên địa chỉ I/O được chỉ định,theo đơn vị được chỉ định.Không đọc từ công I/O bằng lệnh này.
Trong một hệ thống memory-mapped I/O, lệnh này ghi vào địa chỉ bộ nhớ được chỉ định như là địa chỉ I/O. [Cách sử dụng tiêu biểu] TM> OutputHalf 310, 513F Disassemble Disassemble [Định dạng]
Disassemble (DA) [<start address>][, <instruction steps>] [Đặc tả]
Dịch ngược chương trình(Disassemble) từ <start address> được chỉ định cho số xác định <instruction steps> và hiển thị kết quả.
Nếu <start address> bị bỏ qua, tác vụ bắt đầu từ địa chỉ kế tiếp sau lệnh Disassemble trước đó.Trong trường hợp sự trả về monitor sau khi chương trình thực thi dựa vào break, exception hay tương tự, giá trị thanh ghi PC tại điểm đó trở thành <start address > lệnh Disassemble.Nếu <instruction step> bị bỏ qua,disassembly lên đến 16 bước.
Sự hổ trợ Disassemble là sự thực thi phụ thuộc. [Cách sử dụng tiêu biểu] TM> Disassemble AC1000d8 <Disassembly result> Register Dump/Modify Reigister [Định dạng]
[Đặc tả]
Sửa đổi nội dung của <register name>.Nếu <set value> bị bỏ qua,hiển thị nội dung của <register name>
Tên được chỉ định trong <register name> tùy thuộc vào CPU.Các tên không phân biệt chữ hoa chữ thường.
Một nhóm các thanh ghi có thể được chỉ định trong <register name> bởi sụ chỉ định các kí tự đơn sau:
G: Các thanh ghi thông thường
C: Các thanh ghi điều khiển/ hệ thống D: các thanh ghi DSP
F: Các thanh ghi Floating point A: Tất cả các thanh ghi.
Nếu <register name> bị bỏ qua,tất cả các thanh ghi thông thường được hiển thị. Tên các thanh ghi đặc biệt thì phụ thuộc vào sự thực thi.
[Cách sử dụng tiêu biểu] TM> Register
<Hiển thị tất cả các thanh ghi> TM> Register C
<hiển thị tất cả các thanh ghi điều khiển/hệ thống> TM> Register R0, 1234567 TM> Register R0 R0: 01234567 Go Execute Program [Định dạng]
Go (G) [<execution start address>][, <execution end address>] [Đặc tả]
Thực thi một chương trình được chỉ định từ <execution start address> . <execution start address> được thiết lập như là một breakpoint phần mềm tạm thời, với việc trả lại quyền điều khiển cho monitor khi <execution end address> được hoàn thành.
Nếu <execution start address> bị bỏ qua,sự thực thi bắt đầu từ địa chỉ được chỉ định bởi giá trị hiện thời của thanh ghi PC.
Quyền điều khiển được trả về từ chương trình được thực thi sang monitor trong bất kỳ trường hợp nào sau đây.
• Khi việc thiết lập breakpoint hoàn thành
• Khi một exception không được hổ trợ trong chương trình xảy ra.
• Khi một hàm phục vụ monitor dẫn đến việc xử lý từ chương trình đến monitor. [Cách sử dụng tiêu biểu]
TM> Go AC1000d8, AC10434 Break (S) at AC10434
• “at XXXXXXXX” là bộ đếm chương trình của chỉ thị kế tiếp đuợc thực thi
Breakpoint
Set Breakpoint
[Định dạng]
[Đặc tả]
Thiết lập một breakpoint với <break attribute> được chỉ định tại <break address>.Nếu các thông số không xác định, hiển thị tất cả tập các breakpoint.
Các nhóm sau có thể được thiết lập như <break attribute>.S là mặc định nếu không có chỉ định. S: Khi chỉ thị tại <break address> xảy ra, chỉ dừng trước sự thực thi của chỉ thị này.
E: Dừng khi một chỉ thị ở <break address> xảy ra.
R: Dừng sau một tác vụ đọc trong bộ nhớ tại <break address> W: Dừng sau một tác vụ ghi trong bộ nhớ tại <break address>
RW: Dừng sau tác vụ đọc hay ghi trong bộ nhớ tại <break address>
S là một breakpoint phần mềm, sử dụng như một phương thức của phần mềm để dừng sự thực thi như là bằng cách nhúng một chỉ thị trap tại <break address>.Khi có yêu cầu ghi bộ nhớ, nó không thể được sử dụng một tập các breakpoint cho các chỉ thị trong ROM hay tác vụ chỉ